NOIP2014复赛提高组模拟试题
2014noip复赛模拟试题19

1. 观察下表,依据表格中数据排列的规律,请编程求出正整数n在表中出现的次数。
样例:输入:4 输出:3 输入8 输出 42. 编程班即将上课,为了能让每个同学都能拿到教材,老师让star去发教材,由于star比较内向,见到不认识的新同学你会害羞得什么话也不和他说,什么事情也不对他做,当然更不可能发书给他了。
怎么办呢?老师的任务不能不完成啊!当然,遇到star认识的同学star还是很乐意交流的,于是star会要求他认识的同学继续帮他发书(不管对方认不认识他),star害羞的情绪也影响了其他所有同学,于是其他同学也只会发书给他认识的人。
最后star要统计还有哪些同学没有拿到书,他就只能硬着头皮,顶着极大地心理压力给他们发书(老师的任务一定要完成啊)所有的学生都用学号来表示。
Input 第1行:三个数k,n,m(k代表你的学号,n代表人数,m代表关系数n(n<250)和m(m<10000) 。
第2..m+1行: 每行两个数a和b代表a认识b,(不代表b认识a)同一行的a,b不会相同Output 第1行: 所有没有拿到教材的同学的学号,学号从小到大排列。
如果所有同学都能拿到书,那么输出0Sample Input :1 4 6↙1 2↙2 3↙4 1↙3 1↙1 3↙2 3 Sample Output:4输出说明: 只有一个同学,4号学生没有拿到书3. 集合找数:集合A中的元素有以下特征:(1)数1是A中的元素;(2)如果X是A中的元素,则2X+1,3X+1也是A中的元素;(3)除了条件(1),(2)以外的所有元素均不是A中的元素;给定数N,请求出集合中的第N个元素。
例如N=500,A500=3351,N=10000,A10000=1576534. 学生在我们USACO的竞赛中的得分越多我们越高兴。
我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助。
我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。
2014noip复赛模拟练习5

小白的名次题目描述兔子小白是位数学爱好者,有一次它参加了兔界里的数学比赛,成绩公布后,小白很想知道自己的成绩到底排第儿,现在请你帮它编一个程序,要求输入一个成绩,就能知道相应的名次。
注意:同分的按相同名次算,且只算一次。
输入输入共三行。
第一行:一个整数n (n<=30000)第二行:n个正整数(这些数不大于1000)o第三行:一个整数,需要查询的分数。
输出输出共一行。
一个整数,查询成绩的名次。
样例输入730 50 80 60 20 50 6050样例输出3var a:array[0..1000] of integer;i,n ,x,y,s,max:integer;beginreadln(n);for i:=l to 1000 do a[i]:=-l;max:=0;for i:=l to n dobeginread(x);if x>max then max:=x;a[x]:=l;end;read(y);i:=max;while (a[i]<>y) and (i>y) dobegin dec(i); if a[i]=l then inc(s); end;writeln(s+l);end.小s同学出去旅游啦~,小s同学住的宾馆每天早上都会提供丰盛的自助早餐,小S同学最爱吃的就是现烤的切片面包。
但是呢,宾馆的烤面包机很差,虽然说每次最多可以同时烤k块面包,但是只能烤好这些面包的一个面。
小S要想吃上好吃的面包,就需要把面包的两面都烤好。
小S同学一共想吃n块烤面包,但是小S每天都有好多景点需要游览,她不能在早餐上耽误很长时间,因此,小S同学希望你能告诉她最少需要使用儿次烤面包机就可以烤好n块面包。
输入输入数据仅有一行包含两个用空格隔开的正整数n和k(n, k<=10), n表示小s同学一共要烤n块面包,k表示宾馆的烤面包机一次最多可以同时烤好k块面包的一个面。
输岀仅有一行包含一个整数,表示小s同学至少要用多少次烤面包机。
2014NOIP复赛模拟练习23(附答案)

XJL很喜欢解密,一天他无聊,打了个电话给LZP,LZP给了一大堆数字串,并且附上了翻译表。
于是,XJL开始了他的翻译旅程。
不过他一个人闲得无聊,于是叫上你一起做一个程序来翻译这些密码。
程序要求:1、从文件(XJL.IN) 读入数据。
第一行是一个数字n,接下来n行是密码翻译表。
每行一个翻译方式,每行开头是一串字符,接着是它的对应的数字串(长度不超过5个数字)。
第n+2行是一个空行。
第n+3行是要翻译的字符串的长度s,第n+4行为要翻译的数字串,长度为s。
2、把结果输出到文件(XJL.OUT)。
如果能翻译,则输出文件第一行为翻译后的字符串长度,第二行为翻译后的字符串。
否则只在第一行输出“ERROR”(不含双引号)。
范例数据:输入文件XJL.IN3He:123llo:456!:771234567输出文件XJL.OUT6Hello!var s,fs,s1,s2:string;ss:array[1..10000,1..2]of string;n,i,j,k,l:longint;begins:='';readln(n);for i:=1 to n do beginreadln(s);k:=pos(':',s);ss[i,1]:=copy(s,1,k-1);delete(s,1,k);ss[i,2]:=s;end;readln(l);readln(s);for i:=1 to length(s) do begins1:=s1+s[i];for j:=1 to n do if(s1=ss[j,2])then beginfs:=fs+ss[j,1];s1:='';end;end;if(fs='')then writeln('ERROR')else beginwriteln(length(fs));writeln(fs);end;end.猫猫的小鱼:题目描述。
2014noip复赛模拟练习13

1.考官给出3个整数a、b、c。
M=max( a, b, c ) / [ max( a+b, b, c ) * max( a, b, b+c ) ],max(a,b,c)表示a,b,c三个整数中最大的一个整数,max(a+b,b,c)和max(a,b,b+c)以此类推。
试计算M的值(保留六位小数)。
如a=7,b=4,c=6。
则M=max(7, 4, 6)/ [ max( 7+4, 4, 6 ) * max( 7, 4, 4+6 ) ]=7/ [11*10]=0.063636输入一行,三个整数a,b,c(1 <= a,b,c <=10000 )。
输出一行,一个整数M(保留六位小数)。
样例输入7 4 6样例输出0.0636362.2035年,智能机器人在各行各业中的应用已经十分普遍了,毕竟它做事时的精度与力量比一个普通人是强多了。
王涛的运输队里就有一个,是用来装卸货物的。
这天,他们的任务是要把N(2 <= N <= 50 )根废旧的条形钢材运送到钢铁厂重新冶炼。
这些钢材长短不同(有些还特别的长),为了便于运输,只好把它们切割成小段。
所以,他给机器人的任务是:把这些钢材切割并装上卡车。
等机器人做完这事的时候,王涛一看结果,自己都被逗笑了:机器人的逻辑就是和人不同啊——装在车上的所有小段的钢材,居然长度都是一样的(以米为单位),而且,还是所有可行方案中,切割次数最少的那种方案!如果告诉你最开始那N根钢材的长度,你能算出机器人切割出的小段的长度么?输入第一行为整数N ,表示原始钢材的数量。
第二行中是N个用空格分开的整数,表示每根废旧钢材的长度(以米为单位),已知这些整数不小于1,不超过400000。
输出:只有一个整数,表示机器人切割出来的每个小段的长度。
样例输入44 22 8 12样例输出:23。
春游结束时,老师请大家根据这次春游所有同学的表现,投票选出最佳表现奖。
老师给每位同学用随机的正整数进行编号(互不相同),每位同学在纸上写出10位表现最佳同学的编号,然后不记名投票。
NOIP历年复赛提高组试题(2006-2014)

第十二届全国信息学奥林匹克分区联赛(NOIP2006)复赛试题(提高组竞赛用时:3小时)关于竞赛中不同语言使用限制的说明一.关于使用Pascal语言与编译结果的说明1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。
2.允许使用数学库(uses math子句),以及ansistring。
但不允许使用编译开关(最后测试时pascal的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。
二.关于C++语言中模板使用的限制说明1.允许使用的部分:标准容器中的布尔集合,迭代器,串,流。
相关的头文件:<bitset > <iterator > <string > <iostream >2.禁止使用的部分:序列:vector,list,deque序列适配器:stack, queue, priority_queue 关联容器:map, multimap, set, multiset 拟容器:valarray 散列容器:hash_map, hash_set, hash_multimap, hash_multiset 所有的标准库算法相关头文件:<vector > <list > <deque > <stack > <map > <set > <algorithm >1.能量项链(energy.pas/c/cpp)【问题描述】在Mars星球上,每个Mars人都随身佩带着一串能量项链。
在项链上有N颗能量珠。
能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。
并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。
因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。
2014noip复赛模拟练习10(答案)

喜羊羊运动会——撑杆跳高【试题描述】运动会马上就要开始了,撑杆跳高场地上,羊村的N(3 <= N <= 100 )个村民正排成一队有秩序地练习。
“好高啊,我都不知道自己能不能跳过去”,懒羊羊慢条斯理地说道。
“这么高,不知道最少要几只羊叠在一起才会够得着”,沸羊羊向来比较喜欢思考数学问题,这样说道。
试编一程序,计算出最少要几只羊叠在一起(一头羊踩在另一头羊的背上)才能够得着横杆(所谓够得着,指羊的身高总和不小于横竿的高度B)。
如果N头羊叠在一起,都够不着横竿,则输出“Impossible”【输入描述】第一行:两个整数N(3 <= N <= 100 )和B,表示队伍中羊的总数以及横竿的高度。
第二行:空格隔开的N个整数,表示每只羊的身高Hi(1 <= Hi <= 10000 )。
【输出描述】一行,一个整数,表示最少要几头羊才能够到横竿。
如果N只羊叠在一起都够不着则输出“Impossible”。
【输入样例】样例1:5 236 8 1 3 9样例2:6 161 2 3 1 3 5【输出样例】样例1:3样例2:Impossible【试题来源】武进区夏令营程序设计小能手PKprogram ex1797;var n,i,j,t,sum:integer;b,s:real;a:array[1..100] of integer;beginreadln(n,b);for i:=1 to n do read(a[i]);for i:=1 to n-1 dofor j:=i+1 to n doif a[i]<a[j] then begint:=a[i];a[i]:=a[j];a[j]:=t;end;s:=0; i:=0;sum:=0;repeatinc(i);s:=s+a[i];inc(sum);until (s>=b) or (i>=n);if s<b then write('Impossible') else write(sum);end.彩票摇奖(LOTTERY.PAS)【问题描述】为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。
2014noip复赛模拟练习11

1. 新学年就要开始了,爸爸把N元钱给了小青,让他购买一批文具,并作了以下要求:只能买圆珠笔、铅笔和铅笔芯,并且每样至少买一支,总数要超过30支,而且钱要全部花完。
当小青去到文具店时,发现圆珠笔8角钱一支、铅笔2角钱一支、铅笔芯1角钱一支。
小青怎么买才能符合爸爸的要求呢?请你编个程序帮他算出符合购买要求的所有方案总数。
Input :一个整数N,表示购买文具一共的元数。
(1 <= N <= 50)Output :一个整数,即符合购买要求的所有方案总数。
Sample Input 8 Sample Output 1352. 任意一个数都可以由1、2、3三个数组合而成。
如4有以下7种组合方案:1 + 1 + 1 + 1 1 + 1 + 2 1 + 2 + 1 2 + 1 + 1 2 + 2 1 + 3 3 + 1你的问题来了,对于给定的一个数,请你计算出这个整数可以有多少个组合方案,其和由1、2、3组合而成。
数据输入:输入包含多组数据,每一组数据中,输入数据的第一行为一个整数n(1<=n<=20),要分解的数。
数据输出:这个整数的分解的组合数。
样例输入 4 样例输出73. 聪明的小地鼠:在学校里的试验田里面,种了n个大萝卜,小地鼠又非常的喜欢吃萝卜。
它呢,就会出来偷偷的从试验田中偷萝卜。
大萝卜都是种在一排地里面,认真的管理员,按照萝卜的位置早早的给萝卜编了号。
希望能增加管理,保证产量。
谁知道,小地鼠也有了自己的偷萝卜策略。
同样,在这个地里呢,正好也有n只小地鼠,这些小地鼠,他们都是按照顺序出来偷萝卜。
小地鼠们根据自己的出场顺序编好号,然后开始根据自己的编号开始偷萝卜。
因为,小地鼠的老大(即1号老鼠),很胖,所以他决定多偷萝卜了,而只是拿了1号萝卜,把剩余的萝卜交给他的小弟们。
当然,他为了让管理员还能够有点收入,好以后继续种萝卜,就给小弟们,下达了一个命令。
即每个地鼠只能拿自己编号倍数的大萝卜,但是不能拿与自己编号相同的萝卜。
2014noip复赛模拟练习2(答案)

1.某监狱里有个很长的走廊,走廊中一个接一个地有N个房间。
每个房间中锁着一个犯人。
一天夜里,狱警决定玩一个无聊游戏。
第1轮中,他喝了一口威士忌,然后打开每个房间。
第2轮,他喝了一口威士忌,然后按2的倍数遍历每个房间。
第3轮,他又喝了一口威士忌,然后遍历所有3的倍数的房间。
依次类推。
在遍历中,如果房间是锁着的,则打开;否则锁上。
他这样重复N轮,最终醉酒。
这时有些囚犯看到自己房间的锁被打开了,他们立即逃跑。
对于有N个房间的走廊,最终会有多少囚犯逃脱?输入:输入数据的第一行中有一个整数,表示有多少组测试数据。
接下来的若干行每行包含一个值为5-100的整数,这是房间的数目。
输出:对应输入数据输出多行,每行一个整数,表示逃脱的囚犯数量。
样例输入:25100样例输出:210var n,num,s,m,i,k,j:integer;a:array[0..200]of boolean;begin readln(num);for i:=1 to num dobegin readln(n);fillchar(a,sizeof(a),true);for j:=1 to n dofor k:=1 to n doif k mod j=0 then a[k]:=not a[k];s:=0;for j:=1 to n doif a[j]=false then inc(s);writeln(s);end;end. 输入3 10 35 50输出3 5 7输入3 22 68 99 输出 4 8 9输入5 10 30 60 85 100 输出 3 5 7 9 10一个自然数,若它的素因数至少是两重的(相同的素因数至少个数为二个,如:24=2*2*2*3,则称该数为“漂亮数”。
若相邻的两个自然数都是“漂亮数”,就称它们为“孪生漂亮数”,例如8和9就是一对“孪生漂亮数”。
输入X,Y,编程找出[X,Y]之间的所有“孪生漂亮数”。
如输入2 25,则输出8 924 25var i,n,a,t,x,y,s:longint; f :boolean;begin readln(x,y);a:=x;repeata:=a+1;n:=a;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end;if f then beginn:=a+1;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end; end;if f then begin s:=s+1; writeln(a,’‘,a+1);end;until a=y;readln;end.输入50 120输出63 64 75 76 80 81 98 99 99 100 116 117 120 121 输入354 480 输出360 361 363 364 368 369 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF 全国信息学奥林匹克联赛(NOIP2014)复赛
提高组 day1
(请选手务必仔细阅读本页内容)
一、题目概况
二、提交源程序文件名
三、编译命令(不包含优化开关)
注意事项:
1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+, 2.71GHz,内存 2G,上述时限以此配置为准。
4、只提供 Linux 格式附加样例文件。
5、特别提醒:评测在 NOI Linux 下进行。
6、为了方便评测请以自己名字的拼音为文件夹名,而且将原程序直接保存在文件夹内,不用再新建子文件夹。
1.斐波那契
(pf.pas/c/cpp)
【问题描述】
是个斐波那契数迷。
他是如此的酷爱这个数列,因此他想知道很多关于
这个数列的东西,比方说第个斐波那契数是多少啊、前项的和是多少啊如何用若干个斐波那契数的和表示一个自然数啊之类之类的。
今天他希望知道的是:第个斐波那契数的末尾一位是多少?
记表示第个斐波那契数,。
【输入】
输入文件名为pf.in,共行。
输入只有一个数。
【输出】
输出文件名为pf.out,仅一行,即第个数的最后一位。
【输入输出样例】
【数据说明】
对于3的数据满足,;
对于的数据满足,。
(toy.pas/c/cpp)
【问题描述】
一天小D去超市买回来了一个玩具,这个玩具是由n个球和一些支架组成,每一个支架连接着两个不同的球,通过支架每两个球之间的简单路径有且只有一条,如果某一个支架的两端的球全被拿走,那么这个玩具就会垮掉。
小D无聊的时候开始拿走球,问,他有多少中拿球方案,使玩具不垮。
【输入】
输入文件名为toy.in。
第一行一个数n 表示球的个数
接下来若干行每行两个数a,b表示有一个支架连接着球a和球b
【输出】
输出文件名为toy.out.
一行一个数ans 表示DRJ拿球的方案数mod 109+7(可以一个球也不拿)
【输入输出样例】
【数据说明】
30%的数据满足n<=20;
50%的数据满足n<=1000
100%的数据满足 n<=500000;
(running.cpp/c/pas)
【问题描述】
某校开展了同学们喜闻乐见的阳光长跑活动。
为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加3000米长跑运动。
一时间操场上熙熙攘攘,摩肩接踵,盛况空前。
为了让同学们更好地监督自己,学校推行了刷卡机制。
学校中有n个地点,用1到n的整数表示,每个地点设有若干个刷卡机,且两个地点之间有跑道相连接。
进行了一次长跑。
问一个同学从A出发,最后到达B最多可以刷卡多少次。
具体的要求如下:
当同学到达一个地点时,他可以在这里的每一台刷卡机上都刷卡。
但每台刷卡机只能刷卡一次,即使多次到达同一地点也不能多次刷卡。
为了安全起见,每条跑道都需要设定一个方向(每次询问相互独立),这条跑道只能按照这个方向单向通行。
最多的刷卡次数即为在任意设定跑道方向,按照任意路径从A地点到B地点能刷卡的最多次数。
【输入格式】
输入文件名为running.in
第一行两个整数n,m,q表示n个地点和m条跑道有q组询问。
第二行n个数分别表示n个地点的刷卡机个数
然后m行每行两个数a b表示a b两地点之间有一条跑道
然后q行每行两个数A B表示询问从A到B的最多刷卡次数
【输出格式】
输出文件名为running.out
Q行,每行一个数表示最多刷卡次数
【输入输出样例】
【样例解释】
将图的边按如图所示的方法就可以走过所有的点【数据说明】
30%的数据满足n,m,q<=13
另20%的数据满足m=n-1, n,m,q<=10^5 100%的数据满足n,q<=10^5 m<=5*10^5
100%的数据满足图联通。