信息学奥林匹克联赛复赛模拟试题及题解
CCF全国信息学奥林匹克联赛NOIP普及组复赛试题
![CCF全国信息学奥林匹克联赛NOIP普及组复赛试题](https://img.taocdn.com/s3/m/ed38dce7ab00b52acfc789eb172ded630a1c9849.png)
CCF全国信息学奥林匹克联赛NOIP普及组复赛试题CCF全国信息学奥林匹克联赛(NOIP2018)复赛普及组(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-****************,内存32GB。
上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1. 标题统计(title.cpp/c/pas)【问题描述】凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。
统计标题字符数时,空格和换行符不计算在内。
【输入格式】输入文件名为title.in。
输入文件只有一行,一个字符串s。
【输出格式】输出文件名为title.out。
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
见选手目录下的title/title1.in和title/title1.ans。
【输入输出样例1说明】标题中共有3个字符,这3个字符都是数字字符。
见选手目录下的title/title2.in和title/title2.ans。
【输入输出样例2说明】标题中共有5个字符,包括1个大写英文字母,1个小写英文字母和2个数字字符,还有1个空格。
由于空格不计入结果中,故标题的有效字符数为4个。
【数据规模与约定】规定|s|表示字符串s的长度(即字符串中的字符和空格数)。
对于40%的数据,1≤|s|≤5,保证输入为数字字符及行末换行符。
对于80%的数据,1≤|s|≤5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于100%的数据,1≤|s|≤5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。
青少年信息学奥林匹克竞赛试题与解析
![青少年信息学奥林匹克竞赛试题与解析](https://img.taocdn.com/s3/m/a3bcdc6c0622192e453610661ed9ad51f01d54a7.png)
青少年信息学奥林匹克竞赛试题与解析一、选择题(每题3分,共30分)以下关于二进制数的描述,哪一项是错误的?A. 二进制数只有0和1两个数字B. 二进制数的每一位称为比特(bit)C. 二进制数可以直接在计算机中存储和运算D. 二进制数的每一位都代表一个十进制的2的幂次方下列哪个算法的时间复杂度是O(n^2)?A. 冒泡排序B. 选择排序C. 插入排序D. 快速排序(在平均和最坏情况下)在关系型数据库中,以下哪个术语用于描述表与表之间的关系?A. 实体B. 属性C. 关键字D. 外键以下哪项不是计算机网络的基本功能?A. 数据通信B. 资源共享C. 分布式处理D. 数据加密以下哪个算法用于查找无序列表中的元素?A. 二分查找B. 顺序查找C. 插入排序D. 快速排序在面向对象编程中,以下哪个术语用于描述对象的行为?A. 属性B. 方法C. 继承D. 封装以下哪个协议用于在互联网上传输电子邮件?A. FTPB. SMTPC. HTTPD. DNS以下哪个数据结构适用于实现栈?A. 数组B. 链表C. 哈希表D. 二叉树以下哪个术语用于描述计算机程序的指令集合?A. 代码B. 程序C. 算法D. 数据结构以下哪个术语用于描述计算机网络中数据传输的速率?A. 带宽B. 延迟C. 吞吐量D. 丢包率二、填空题(每题4分,共16分)在计算机科学中,__________ 是一种特殊类型的循环,其中循环的每次迭代都依赖于前一次迭代的结果。
在关系型数据库中,__________ 是用于唯一标识表中每一行数据的字段或字段组合。
在计算机网络中,__________ 是指从一个节点发送数据到另一个节点所需的总时间。
在面向对象编程中,__________ 是一种机制,允许一个类继承另一个类的属性和方法。
三、简答题(每题12分,共24分)描述算法的基本组成部分,并解释它们的作用。
解释计算机网络中的TCP/IP协议栈,并说明各层的主要功能。
小学生信息学奥林匹克复赛模拟试题一
![小学生信息学奥林匹克复赛模拟试题一](https://img.taocdn.com/s3/m/9f84ee4de518964bcf847c62.png)
小学生信息学奥林匹克复赛模拟试题一说明:1.严格按题目要求的输入、输出格式读写数据,否则不得分。
2.请在D盘根目录下建立以自己考号命名的文件夹,并把需要提交的文件(即每一题的源文件和编译后的可执行文件)保存在此文件夹内。
3.竞赛结束后速离开考场,不要关机。
第一题:开灯游戏(xj1.pas)【问题描述】有n盏灯,放在一排,从1到n依次顺序编号。
有m个人也从1到m依次顺序编号。
第1个人(1号)将灯全部关闭;第2个人(2号)将凡是2的倍数的灯打开;第3个人(3号)将凡是3的倍数的灯作相反处理(该灯如是打开的,则将它关闭;如是关闭的,则将它打开)。
以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。
试计算当第m个人操作后,哪几盏灯是亮的?【输入格式】从键盘输入n,m的值。
(n,m均为小于32768的自然数,且n>=m)【输出格式】在同一行输出亮着的灯的编号。
(没有灯亮则输出“NO”)【样例输入】5 3【样例输出】2 3 4第二题:数列求和(xj2.pas)【问题描述】简单数列是有规律排列的一些数,例如1,2,3,4,5,6,7就是这样的数列,这种数列中的后一个数总是前一个数多或少一个相同的数,其实只要知道这种数列中的前三个数和最后一个数就可以写出数列中的所有的数。
你的任务是根据给出的数列求出这个数列所有数的和。
每个数列的前三个数和最后一个数从键盘输入。
【输入格式】输入只有一行,分别为数列的前三个数和最后一个数。
所有输入均为不大于32767的自然数。
【输出格式】以等式的形式输出这个数列的和。
【样例输入1】项数=(末项-首项) div 公差+11 2 3 7【样例输出2】1+2+3+…+7=28【样例输入2】-3 -1 1 5【样例输出2】(-3)+(-1)+1+…+5=5(说明:算式中只要求输出前三个数和最后一个数,中间的数用…代表,等式左边的负数要加上小括号)第三题:算式求解(xj3.pas)【问题描述】输入一个算式,输出算式的结果。
第七届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题
![第七届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题](https://img.taocdn.com/s3/m/94a6ce35aa00b52acec7ca59.png)
第七届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题第七届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题(普及组二类试卷三小时完成)●●存盘文件名分别为C21.HTM.C22.C23.C24.C25,存到软盘上,存错无效.●●一.网页设计(20分)1.题目:珍贵的自然资源2.网页内容及技巧要求:(1)将〝珍贵的自然资源〞作为主页的主标题且滚动显示(从左到右或从右到左),字号为7号,红色:(2)以下面内容为标题创建超链接(内容可有可无,要求能从子页返回主页):美丽的祖国灰色的天空我的遐想(3)在主页适当位置以〝我爱大自然〞为题写50字左右的能充分表现出一个中学生热爱自然.热爱人类的美好情操以及为保护自然从我做起的热切愿望.版面样式要富于变化:在完成以上要求后可任意发挥,但要与主题相符.二.由键盘输入两个整数,编写程序求这两个数的最大公因子.(20分)三.已知N!=N_(N-1)_(N-2)…3_2_1,编写程序求1000!后有多少个0.(20分)四.任给出4个非0的不同数字,编写程序求出由这4个数字组成的所有4位数.例如:输入:3,2,1,6输出:1236 1263 1326 1362 1623 16322136 2163 2316 2361 2613 26313126 3162 3216 3261 3612 36216123 6132 6213 6231 6312 6321程序要求:从键盘输入4个不同的非0数字,列出由这4个数字组成的所有4位数,每行输出6个.(20分)五.编写程序实现装球(20分)设有N个盒子(N足够大,可装入任何数量的球),分别编号1,2,….同时有K个小球(K>0),今将K个小球装入到盒子中去,装入规则如下:1.第一个盒子不能为空.2.装入必须严格按递增的顺序进行.例如,当K=8,N=6装入方法有:1,2,5或1,3,43.在满足上面的两个条件下,要求有球的盒子尽可能多.4.装完之后,相邻盒子中球个数差的绝对值之和为最小(未装的盒子不计).因此在上例中,装入方法最终选1,3,4.。
信息学奥赛试题精选33题(附带题解)
![信息学奥赛试题精选33题(附带题解)](https://img.taocdn.com/s3/m/b2ee0c4553d380eb6294dd88d0d233d4b14e3f8a.png)
第1~10题为基础题,第11~20题为提高题,第21~33为综合题注:因为在本文档中需要用到一些特殊的数学符号(如:求和号、分数等),所以当您在百度文库中浏览时,一些数学符号可能会显示不出来,不过当您把本文档下载下来在本地浏览时,所有的符号即可全部都显示出来。
^_^基础题:【1 Prime Frequency】【问题描述】给出一个仅包含字母和数字(0-9, A-Z 以及a-z)的字符串,请您计算频率(字符出现的次数),并仅报告哪些字符的频率是素数。
输入:输入的第一行给出一个整数T( 0<T<201),表示测试用例个数。
后面的T行每行给出一个测试用例:一个字母-数字组成的字符串。
字符串的长度是小于2001的一个正整数。
输出:对输入的每个测试用例输出一行,给出一个输出序列号,然后给出在输入的字符串中频率是素数的字符。
这些字符按字母升序排列。
所谓“字母升序”意谓按ASCII 值升序排列。
如果没有字符的频率是素数,输出“empty”(没有引号)。
注:试题来源:Bangladesh National Computer Programming Contest在线测试:UV A 10789提示先离线计算出[2‥2200]的素数筛u[]。
然后每输入一个测试串,以ASCLL码为下标统计各字符的频率p[],并按照ASCLL码递增的顺序(0≤i≤299)输出频率为素数的字符(即u [p[i]]=1且ASCLL码值为i的字符)。
若没有频率为素数的字符,则输出失败信息。
【2 Twin Primes】【问题描述】双素数(Twin Primes)是形式为(p, p+2),术语“双素数”由Paul Stäckel (1892-1919)给出,前几个双素数是(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43)。
在本题中请你给出第S对双素数,其中S是输入中给出的整数。
全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)
![全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)](https://img.taocdn.com/s3/m/a29f3ebfb1717fd5360cba1aa8114431b90d8ed1.png)
全国信息学奥林匹克联赛(NOIP2010)复赛_普及组_解题报告(pascal)全国信息学奥林匹克联赛(NOIP2010)复赛普及组解题报告1.数字统计(two.pas/c/cpp)【问题描述】请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6次。
【算法思路】枚举法,依次将L至R转化为字符串,查找当中有多少个”2”.【程序代码】program two;varl,r:1..10000;i,j,h,c:longint;s:string;beginassign(input,'two.in');assign(output,'two.out');reset(input);rewrite(output);readln(l,r);c:=0;for i:=l to r dobeginstr(i,s);h:=length(s);for j:=1 to h doif s[j]='2'then c:=c+1;end;writeln(c);close(input);close(output);end.2.接水问题(water.pas/c/cpp)【问题描述】学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。
现在有n 名同学准备接水,他们的初始接水顺序已经确定。
将这些同学按接水顺序从1到n 编号,i号同学的接水量为w i。
接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙头接水。
当其中某名同学j 完成其接水量要求w j 后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。
这个换人的过程是瞬间完成的,且没有任何水的浪费。
第十届全国青少年信息学奥林匹克联赛复赛试题+答案
![第十届全国青少年信息学奥林匹克联赛复赛试题+答案](https://img.taocdn.com/s3/m/7d378dda50e2524de5187e2c.png)
第十届全国青少年信息学奥林匹克联赛复赛试题+答案(普及组三小时完成)不高兴的津津(unhappy.pas/dpr/c/cpp)【问题描述】津津上初中了。
妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。
另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。
但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。
假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。
请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
【输入文件】输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。
每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
【输出文件】输出文件unhappy.out包括一行,这一行只包含一个数字。
如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。
如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
【样例输入】5 36 27 25 35 40 40 6【样例输出】3花生采摘(peanuts.pas/dpr/c/cpp)【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。
这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。
在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。
有经验的多多一眼就能看出,每棵花生植株下的花生有多少。
为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。
”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1)从路边跳到最靠近路边(即第一行)的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边(即第一行)的某棵花生植株跳回路边。
第二年全国青少年信息学(计算机)奥林匹克分区联赛高中复赛试卷
![第二年全国青少年信息学(计算机)奥林匹克分区联赛高中复赛试卷](https://img.taocdn.com/s3/m/6610d3e9710abb68a98271fe910ef12d2af9a979.png)
第二年全国青少年信息学(计算机)奥林匹克分区联赛高中复赛试卷(高中组 竞赛用时:3小时)1.竞赛安排(20分)设有有2 n (n<=6)个球队进行单循环竞赛,打算在2 n – 1天内完成,每个队每天进行一场竞赛。
设计一个竞赛的安排,使在2 n – 1天内每个队都与不同的对手竞赛。
例如n=2时的竞赛安排: 队 1 2 3 4 竞赛 1==2 3==4 一天 1==3 2==4 二天 1==4 2==3 三天 2.数制转换(20分)设有一个字符串A$的结构为: A$=’m<n>p’ 其中m 为数字串(长度<=20),而n,p 均为1或2位的数字串(其中所表达的内容在2-10之间)。
程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制),以p进制的形式输出。
例如:A$=’48<10>8’其意义为:将10进制数48,转换成8进制数输出。
输出结果为:48<10>=60<8>4.挖地雷(30分)在一个地图上有N 个地窖(N<=20),每个地窖中埋有一定数量的地雷。
同时,给出地窖之间的连接路径。
例如:[题目要求]当地窖及其连接的数据给出之后,某人能够从任一处开始挖地雷,然后能够沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作终止。
设计一个挖地雷的方案,使某人能挖到最多的地雷。
输入格式: N : (表示地窖的个数)W1,W 2,W 3,……W N (表示每个地窖中埋藏的地雷数量) A 12…………… . A 1NA 23…………..A 2N ……..A N-1 NV 1V 4V 5地窖之间连接路径(其中Aij =1表示地窖i,j之间是否有通路:通Aij=1,不通Aij==0)输出格式:K1--K2--……….K V (挖地雷的顺序)MAX (挖地雷的数量)例如:⑩--------⑧④-----⑦-------⑥其输入格式为:输出:5 1 –3 -4 -510,8,4,7,6 max=271 1 1 00 0 01 114.砝码称重(30分)设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),要求:输入方式:a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)输出方式:Total=N(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情形)如输入:1_1_0_0_0_0 (注:下划线表示空格)输出:TOTAL=3 表示能够称出1g,2g,3g三种不同的重量。
noip复赛模拟试题
![noip复赛模拟试题](https://img.taocdn.com/s3/m/91cf1f851b37f111f18583d049649b6648d7098e.png)
noip复赛模拟试题第一题:最大字符(zdzf.c/cpp)读入一串由大写、小写、数字组成的字符(<256位),输出ASCII 表值最大的那个字符出来。
例如:读入:abeADEf3输出:e第二题:盖房子(gfz.c/cpp)题目正文【问题描述】永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的。
但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。
这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。
他希望找到一块最大的正方形无瑕疵土地来盖房子。
【输入格式】输入文件第一行为两个整数n,m(1<=n,m<=1000),接下来n 行,每行m个数字,用空格隔开。
0表示该块土地有瑕疵,1表示该块土地完好。
【输出格式】一个整数,最大正方形的边长。
【输入样例】4 40 1 1 11 1 1 00 1 1 01 1 0 12第三题:IQ(iq.c/cpp)题目正文【问题描述】根据世界某权威学会的一项调查,学信息学的学生IQ非常高。
举个最好的例子,如果我们把学信息学的一些学生调去学数学,那么两个竞赛的学生平均IQ都会提升!!现在给出一群数学竞赛全体学生的IQ和信息学竞赛全体学生IQ,问最多能把几个学信息学的学生调去学数学,而两个竞赛的学生平均IQ都有提升呢?每次只调一个学生,而且每次调配,两个竞赛的学生平均IQ都要提升。
【输入格式】输入数据的第一行一个正整数N,代表数学竞赛班学生的数目。
N <= 100接下来一行,有N个正整数,代表每个数学学生的IQ(1 到 200 之间)。
然后一个整数M,代表信息学竞赛班学生数目 M <= 100接下来一行,有M一个正整数,代表每个信息学竞赛班学生的IQ (1 到 200 之间)输入数据保证信息学学生平均IQ高于数学学生。
输出格式:输出只有一行,一个正整数,代表能从信息学调去学数学的学生的个数。
第十年全国青少年信息学奥林匹克联赛提高组复赛试题
![第十年全国青少年信息学奥林匹克联赛提高组复赛试题](https://img.taocdn.com/s3/m/03279de10b4e767f5bcfce67.png)
第十年全国青少年信息学奥林匹克联赛提升组复赛试题( 提升组 3 小时达成 )【一】津津的积蓄计划(Save.pas / dpr /c/ cpp) 、【问题描绘】津津的零花费向来基本上自己治理。
每个月的月初妈妈给津津300 元钱,津津会估算那个月的开销,同时总能做到实质开销和估算的同样。
为了让津津学习怎样积蓄,妈妈提出,津津可以随时把整百的钱存在她那边,到了年终她会加上 20%还给津津。
所以津津拟订了一个积蓄计划:每个月的月初,在获得妈妈给的零花费后,若是她估计到那个月的月底手中还会有多于 100 元或恰巧 100 元,她就会把整百的钱存在妈妈那边,节余的钱留在自己手中。
比如 11 月初津津手中还有 83 元,妈妈给了津津 300 元。
津津估计 11 月的开销是 180 元,那么她就会在妈妈那边存 200 元,自己留下 183 元。
到了 11 月月底,津津手中会剩下 3 元钱。
津津发明那个积蓄计划的重要风险是,存在妈妈那边的钱在年终以前不可以拿出。
有可能在某个月的月初,津津手中的钱加上那个月妈妈给的钱,不够那个月的原定估算。
若是出现这类状况,津津将不得不在那个月节衣缩食,压缩估算。
此刻请你依据 2004 年 1 月到 12 月每个月津津的估算,判断会可不可以出现这类状况。
若是可不可以,计算到2004 年年终,妈妈将津津平时存的钱加上20%还给津津以后,津津手中会有多少钱。
【输入文件】输入文件 save.in 包含 12 行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的估算。
【输出文件】输出文件 save.out 包含一行,这一行只包含一个整数。
若是积蓄计划实行过程中出现某个月钱不够用的状况,输出 -X ,X 表示出现这类状况的第一个月;否那么输出到 2004 年年终津津手中会有多少钱。
【样例输入 1】29023028020030017034050908020060【样例输出 1】-7【样例输入 2】29023028020030017033050908020060【样例输出 2】1580【二】归并果子(fruit.pas /dpr /c/cpp) 【问题描绘】在一个果园里,多多差不多将所有的果子打了下来,并且按果子的不一样种类分红了不一样的堆。
niop复赛试题及c 答案
![niop复赛试题及c 答案](https://img.taocdn.com/s3/m/3ab986d518e8b8f67c1cfad6195f312b3169eb2c.png)
niop复赛试题及c 答案niop复赛试题及答案尊敬的参赛选手:感谢您参加本次niop(全国信息学奥林匹克联赛)的复赛。
以下是复赛试题及答案的详细内容。
1.选择题(每题4分,共40分)1.1 题目一答案:A1.2 题目二答案:C...(此处省略)2.编程题(每题20分,共60分)2.1 题目一题目描述:请编写一个程序,实现输入两个数,求它们的和并输出。
代码示例:```pythona = int(input("请输入第一个数:"))b = int(input("请输入第二个数:"))result = a + bprint("两个数的和为:", result)```2.2 题目二题目描述:请编写一个程序,检查一个字符串是否为回文字符串(正反读都一样)。
代码示例:```pythondef is_palindrome(string):if string == string[::-1]:return Trueelse:return Falseinput_str = input("请输入要检查的字符串:")if is_palindrome(input_str):print("是回文字符串")else:print("不是回文字符串")```...(此处省略)以上是本次niop复赛试题及答案的部分内容。
希望本次比赛对您来说是一次宝贵的学习和锻炼机会。
祝您取得优异的成绩!谢谢!。
金华一中信息学奥林匹克联赛(NOIP2009)复赛模拟试题(汇总
![金华一中信息学奥林匹克联赛(NOIP2009)复赛模拟试题(汇总](https://img.taocdn.com/s3/m/8f6e42e805087632311212fa.png)
金华一中信息学奥林匹克联赛(NOIP2009)复赛模拟试题(三)一、题目概览中文题目名称遥控车车展拉力赛舞台设置英文题目名称car exhibit rally stage 可执行文件名car exhibit rally stage 输入文件名car.in exhibit.in rally.in stage.in 输出文件名car.out exhibit.out rally.out stage.out1秒1秒1秒1秒每个测试点时限测试点数目10 10 10 1010 10 10 10每个测试点分值比较方式全文比较全文比较全文比较全文比较二、运行内存限制运行内存上限512 M512 M512 M512 M第一题:遥控车【题目描述】平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i]。
韵韵早就迫不及待地想玩名字是s的遥控车。
可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀(也就是说能确定一个i,使s是name[i]的前缀),这时她就能玩第i辆车;或者是一个无中生有的名字,即s不是任何一辆车名字的前缀,这时候她什么也不能玩。
你需要完成下面的任务:1.韵韵想了m个她想要的名字,请告诉她能玩多少次。
2.由于管理员粗心的操作,导致每辆车的摆放位置都可能出现微小的差错,原来第i辆车现在的位置可能是i-1、i、i+1中的任意一个(第1辆车的位置不可能是0,第n辆车的位置不可能是n+1)。
请你计算出共有多少种可能的排列。
注:数据保证当s是name[i]的前缀时,i是唯一确定的。
一辆车可以玩多次。
【输入格式】第一行是2个正整数n、m。
接下来n行,每行1个字符串name[i],表示第i辆车的名字。
接下来m行,每行1个字符串s,表示韵韵想要的名字。
【输出格式】第一行输出韵韵能玩的次数。
第二行输出共有多少种可能的排列。
【输入样例】4 4AbcdDeFAAaaBcccAbAAAbCaBcc【输出样例】35对于题目涉及到的字符串严格区分大小写,且长度小于255。
全国信息学奥林匹克联赛(NOIP2010 )复赛 模拟 赛六重点
![全国信息学奥林匹克联赛(NOIP2010 )复赛 模拟 赛六重点](https://img.taocdn.com/s3/m/eae7a4b9f524ccbff021841a.png)
全国信息学奥林匹克联赛(NOIP2010)复赛模拟赛六提高组(请选手务必仔细阅读本页内容)一.题目概况二.运行内存限制三.注意事项1、文件名(程序名和输入输出文件名)必须使用小写。
2、 C/C++中函数main(的返回值类型必须是int ,程序正常结束时的返回值必须是0。
3、 symbol 评测时采用的机器配置为:CPU 2.33GHz,内存2G ,上述时限以此配置为准。
1. F ibonacci sequence (fibonacci.pas/c/cpp【问题描述】f(n =f(n−1 +f(n−2 *n≥3, f(1 =1, f(2 =1+,这就是著名的Fibonacci sequence 。
现在给你两个数x, y, 其中x ≤y, y ≤231−1。
( 你的任务就是求出∑y即Fibonacci 数列第x~y项的和除以10000i=xfi mod 10000。
的余数。
【输入】第一行是一个整数T(T≤1000 , 表示有多少组数据。
接下来T行,每行两个整数x ,y ,意义如上述。
【输出】( 输出T 行,对于每组数据,输出∑yi=xfi mod 10000。
【输入输出样例】【数据约定】对于80%的数据,T=1,且y ≤106对于100%的数据,T≤1000,且y ≤231−12. N umber(number.pas/c/cpp【问题描述】有N(2≤N ≤15 个数a1,a2, ……, an−1, an, 如果在这N 个数中,有且仅有一个数能整除m ,那么整数m 就是一个幸运数,你的任务就是在给定a1,a2, ……, an−1, an的情况下,求出第K 小的幸运数。
【输入】第一行为一整数数N ,K(2≤N ≤15,1≤K ≤231−1 ,意义如上述。
接下来一行有N 个整数,a1,a2, ……, an−1, an,这N 个整数均不超过231−1。
【输出】输出一行,仅包含一个整数ans ,表示第K 小的幸运数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
test01题解1、1、乒乓球比赛(table.cpp)问题描述:一次乒乓球比赛,赛制为单循环赛,每一对选手之间都要打一场五局三胜的比赛,赢得最多比赛局数的人为优胜者。
现在你有一份比赛记录表,记录了每一场比赛的比分,计算出优胜者。
输入格式:第一行包含n(2≤n≤100),比赛的选手数目。
接下来给出一个n*n矩阵A。
矩阵的每一个元素都是0、1、2、3中的一个。
第i行第j列的元素aij是第i个选手在和第j个选手的比赛中赢的局数。
aij和aji(i≠j)正好有一个是3,另外一个小于3。
矩阵的所有对角线元素都是0。
输出格式:int m ain(){int n,i,mmax,imax,j,t,y;fin>>n; mmax=0;imax=-1;for (i=0;i<n;i++){t=0; for (j=0;j<n;j++){ fin>>y; t+=y; }if (t>mmax) { mmax=t;im ax=i;}}fout<<im ax+1<<endl;}2、数字序列(number.cpp)问题描述:在下列的无穷数字序列1121231234123451234561234567123456781234567891234567 89101234567891011123456789101112......中,查找第i个数字。
输入格式:第一行为正整数t(1≤t≤10),表示测试数据组数。
接下来t行,每行一个正整数i(1≤i≤231-1)。
输出格式:i,输出对应位置上的数字,每个数字一行。
对于每一个int length,n,t; long long a,value,f[100001];fin>>t;while (t--){fin>>a;if (a==1) { fout<<1<<endl; continue; }f[1]=1;f[2]=3;n=2;while (f[n]<a){n++; length=0; value=n;while (value) { value/=10; length++;}f[n]=f[n-1]+f[n-1]-f[n-2]+length;}if (f[n]==a) fout<<n%10<<endl;else {long long e,t,r=0; value=a-f[n-1];for (e=1;r<value;e++) {t=e; while (t) { t/=10; r++;}}e--;if (r==value) fout<<e%10<<endl;else {for(long s=1;s<=r-value;s++) e/=10; fout<<e%10<<endl;}}}}3、斐波那契数字统计(fibs.cpp)问题描述:编程统计从a到b中一共有多少斐波那契数。
其中:f1=1,f2=2,f n=f n-1+ f n-2 (n>=3)。
输入格式:第一行为测试数据组数t(1≤t≤10),接下来t行,每行两个整数表示a和b,a≤b≤10100。
输出格式:对于每一对a和b,输出对应的斐波那契数的个数,每个整数一行。
char a[105],b[105]; int start[105],final[105],c[105],d[105],e[105];void init(){start[0]=strlen(a); final[0]=strlen(b);for (int i=start[0]-1;i>=0;i--) start[start[0]-i]=a[i]-'0';for (int i=final[0]-1;i>=0;i--) final[final[0]-i]=b[i]-'0';c[0]=1; c[1]=1; d[0]=1;d[1]=1;}int s m all(){if (d[0]<start[0]) return 1; if (d[0]>start[0]) return 0;for (int i=d[0];i>=1;i--){if (d[i]<start[i]) return 1; if (d[i]>start[i]) return 0;}return 0;}int big(){if (d[0]<final[0]) return 1; if (d[0]>final[0]) return 0;for (int i=d[0];i>=1;i--){if (d[i]<final[i]) return 1; if (d[i]>final[i]) return 0;}return 1;}void plus(){for (int i=1;i<=d[0];i++) e[i]+=d[i]+c[i];for (int i=1;i<=d[0];i++){ e[i+1]+=e[i]/10; e[i]%=10; }if (e[d[0]+1]>0) e[0]=d[0]+1; else e[0]=d[0];for (int i=0;i<105;i++){ c[i]=d[i]; d[i]=e[i]; e[i]=0; }}int com pute(){int ans=0;while (sm all()) plus();while (big()){ ans++; plus(); }return ans;}int m ain(){int n,ans; fin>>n;while (n--){fin>>a>>b; init(); ans=com pute(); fout<<ans<<endl;}}4、基因串识别(gene.cpp)问题描述:众所周知,人类基因可以被简单认为是一个字符串,包含四种分别用A,C,T,G表示的核苷酸。
生物学家对鉴别人类基因核确定他们的功能很感兴趣。
因为这对诊断人类疾病和开发新药很有用。
人类基因可以用一堆特别的快速的试验来鉴别,而且通常要借助电脑的帮助一旦基因序列测定了,下一步就可以确定它的功能了。
生物学家确定一个新鉴定了的基因的功能的方法之一是在在基因数据库里和其他基因对照。
要搜索的数据库里储存了很多的基因和它们的功能--很多研究人员提交了他们的研究基因和功能到数据库,而数据库是在互联网上公开的。
数据库会返回一堆最相近基因。
生物学家们假设类似的基因表示类似的功能。
所以新基因的功能也包含在列表里的基因里。
所以严格确定最相近的一个对生物试验非常必要。
你的任务是写一个程序来按以下规则比较两个基因和决定他们的相似程度。
例如,给出两个基因串AGTGATG 和GTTAG,他们有多相似呢?一个测量两个基因相似程度的方法就叫做“校准”。
在校准中, 如果必要是可以在基因的适当位置插进空格以令他们的长度相等。
例如,一个空格插进了AGTGATG以后就得到AGTGAT-G,三个空格插进了GTTAG就得到–GT—TAG(空格用减号-表示)。
现在两个串的长度就相等了。
现在排在一齐就成了:AGTGAT-G-GT--TAG在这个校准中,有四个基因是相配的:第二位的G,第三位的T,第六位的T,和第八位的G。
每对排列排列的字母用一下的矩阵分配了不同的分值。
其中,*表示空格对空格是不允许的。
所以以上这个校准的分值是(-3)+5+5+(-2)+(-3)+ 5+(-3)+5=9 。
当然,其他校准也是有可能的。
以下有另一种排列(不同数目的空格插进不同的位置):AGTGATG-GTTA-G这个校准给出了的分值是(-3)+5+5+(-2)+5+(-1) +5=14。
所以这一个比前一个要好。
两个基因串的最大校准分值就是它们的相似程度。
在这个例子中,没有其他的校准有更高的分值了,所以说这两个基因的相似程度是14。
输入格式:第一行,一个整数t(1≤t≤10)表示测试数据组数。
每组测试数据有两行:每行有一个表示基因长度的整数和一个基因序列。
每个基因的长度都不超过100。
输出格式:对于每一组基因串,输出对应的相似程度,每个数字一行。
AGTGATG和-GTTA-G将其从某一处切开,如果左边部分的分值不是最大,那么将其进行调整,使其分值变大,则整个解分值变大,与已知的最优矛盾。
所以左边部分的分值必是最大。
同理,右边也是。
可见满足最优子结构的性质。
考虑使用DP:设两个DNA序列分别为s1,s2,长度分别为len1,len2,score为分值表。
f[i,j]表示子串s1[1..i]和s2[1..j]的最优分值。
考虑一个f[i,j],我们有:1.s1取第i个字母,s2取“-”:f[i-1,j] + score[s1[i],'-']2.s1取“-”,s2取第j个字母:f[i,j-1] + score['-',s2[j]]3.s1取第i个字母,s2取第j个字母:f[i-1,j-1] + score[s1[i],s2[j]]即f[i,j] = max(f[i-1,j] + score[s1[i],'-'], f[i,j-1] + score['-',s2[j]], f[i-1,j-1] + score[s1[i],s2[j]]);然后考虑边界条件,这道题为i或j为0的情况。
当i=j=0时,即为f[0,0],这是在计算f[1,1]时用到的,根据f[1,1] = f[0,0] + score[s1[i], s2[j]],明显有f[0,0] = 0。
当i=0时,即为f[0,1..len2],有了f[0,0],可以用f[0,j] = f[0,j-1] + table['-',s2[j]]来计算。
当j=0时,即为f[1..len1,0],有了f[0,0],可以用f[i,0] = f[i-1,0] + table[s1[i],'-']来计算。
至于计算顺序,只要保证计算f[i,j]的时候,使用到的f[i-1,j],f[i,j-1],f[i-1,j-1]都计算出来了就行了。
所谓划分阶段也就是为了达到这个目的。
这样我们使用一个二重循环就可以了。
int score[5][5]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,0}};int f[101][101];int num(char ch){if(ch=='A') return 0; if(ch=='C') return 1;if(ch=='G') return 2; if(ch=='T') return 3;if(ch=='-') return 4;}int m ax(int x,int y,int z){int temp=-100,i;if(x>tem p) temp=x; if(y>temp) temp=y;if(z>tem p) temp=z; return tem p;}int m ain() {int t,n1,n2,i,j,x,y,z; string s1,s2;fin>>t;while (t) {fin>>n1; fin>>s1; fin>>n2; fin>>s2;f[0][0]=0;for(i=1;i<=n1;i++)f[i][0]=f[i-1][0]+score[num(s1[i-1])][4];for(j=1;j<=n2;j++)f[0][j]=f[0][j-1]+score[4][num(s2[j-1])];for(i=1;i<=n1;i++)for(j=1;j<=n2;j++) {x=f[i-1][j]+score[num(s1[i-1])][4];y=f[i][j-1]+score[4][num(s2[j-1])];z=f[i-1][j-1]+score[num(s1[i-1])][num(s2[j-1])];f[i][j]=max(x,y,z);}cout<<f[n1][n2]<<endl;}}。