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复赛模拟练习29

1. 辉辉、姗姗和佳佳是好朋友,他们一起参加了在湖南长沙长郡中学举办的第二十一届全国青少年信息学奥林匹克竞赛(NOI2004)。
他们很早就来到了长沙,可是报名还没有开始。
怎么办呢?他们决定分头出去玩一天,晚上回到宿舍以后给大家说说自己这一天做了什么有意义的事情。
你一定想不到辉辉干嘛去了——他睡了一天。
他想:“比赛前几天老是写程序到深夜,头晕晕的……没关系,好好睡一觉,然后我会精神抖擞。
醒了之后,我要做有意义的事情。
”这一睡可不得了,辉辉从早上a点b分c秒一直睡到了下午d点e分f秒。
他睡了多少秒钟呢?六个非负整数a, b, c, d, e, f(1<=a, d<=11, 0<=b, c, e, f<=59)。
例如,a=6, b=5, c=4, d=3, e=2, f=1表示辉辉从06:05:04睡到15:02:01。
【样例输入】6 5 4 3 2 1【样例输出】322172. 将a,b,c,……n个字符,按顺时针方向排成一圈,然后从任意位置开始按顺时针方向连续取k个字符组成一个k位字符串。
(k<n)例如:n=3 k=2 按顺时针方向排成如下一圈:ac b此时,可组成:ab,bc,ca。
当给出n,k后,输出n个k位字符串输入:n k 输出:n个k位字符串输入输出样例:输入:5 4 输出:abcdbcdecdeadeabeabc3. 问题描述:计算机软件版本通常被用来区分某种软件在不同时间的发布。
大部分软件版本号都是用“.”分隔的非负数的序列。
对两个不同的版本A = a1.a2.a3…an和B = b1.b2.b3…bm,如果下面两个条件之一成立,我们认为版本A要比版本B新:1.对某个i,我们有:对所有j < i, ai > bi 和aj = bj;2.n比m大,而且对所有i < m, ai = bi。
(ai和bi都不超过LONGINT)在这个问题里,你要对给定的一组版本号,按照上面的定义从旧到新排序。
2014noip复赛模拟练习12(答案)

心系南方灾区【问题描述】现在我国南方正在承受百年不遇的大雪、冻雨灾害。
北京市已经开始了面向全体市民的捐款捐物活动,并组织运力,以最快速度将这些救灾物资运送到灾区人民的手中。
已知救灾物资中有m件大衣(10000<=m<=2000000 ),一辆卡车一次最多可以运走n件大衣(2000<=n<=10000)。
请你编写程序计算一下,要将所有的大衣运走,北京市政府最少需要调动多少辆卡车参与运送。
【输入文件】文件名:HELP.IN文件中只有两个整数m、n 。
【输出文件】文件名:HELP.OUT文件中只有一个整数,表示需要的卡车数量。
【样例输入】10000 2000【样例输出】5Delphi语言: Codee#10155program help;vara,b:longint;beginassign(input,'help.in');assign(output,'help.out');reset(input);rewrite(output);readln(a,b);if a mod b=0 then write(a div b) else write(a div b+1);close(input);close(output);end.给出某两个整数a和b(a<=b)的最大公约数GCD和最小公倍数LCM,请找出满足的a和b,使得b-a的值最小。
Input输入数据只有一行,包括两个整数GCD和LCM。
输入保证至少存在一组解。
Output输出包含一个整数,为最小的b-a的值。
Sample Input Copy6 36Sample Output Copy6HINT对于100%的数据,1<=a<=b<=10^9。
解法:设原数为x,y则有x*y/gcd=lcm,且x/gcd与y/gcd互质,(x/gcd*y/gcd)*gcd=lcm,故我们只要求出两个互质数相乘=lcm/gcd即可代码:vara,b,i:longint;function gcd(a,b:longint):longint;beginif a mod b=0 then exit(b) else exit(gcd(b, a mod b));end;beginreadln(a,b);b:=b div a;for i:=trunc(sqrt(b)) downto 1 do if (b mod i=0) and (gcd(i,b div i)=1)then break;writeln(a*(abs(i-(b div i))));end.集训队有一个大杯子,大家训练累的时候都用这个东西来喝咖啡,喝咖啡就需要热水,喝热水就需要烧水,烧水烧多少是一个问题,现在我们知道烧了多少热水,你能告诉我们把这些水倒在杯子里面会有多高吗?杯子是这样的:我们知道杯子上面的圆的半径,还有下面圆的半径,还有杯子的高。
2014noip复赛模拟练习5

1.小白的名次:兔子小白是位数学爱好者,有一次它参加了兔界里的数学比赛,成绩公布后,小白很想知道自己的成绩到底排第几,现在请你帮它编一个程序,要求输入一个成绩,就能知道相应的名次。
注意:同分的按相同名次算,且只算一次。
输入:输入共三行。
第一行:一个整数n(n<=30000)第二行:n个正整数(这些数不大于1000)。
第三行:一个整数,需要查询的分数。
输出:输出共一行。
一个整数,查询成绩的名次。
样例输入730 50 80 60 20 50 6050样例输出 32.小s同学出去旅游啦~,小s同学住的宾馆每天早上都会提供丰盛的自助早餐,小s同学最爱吃的就是现烤的切片面包。
但是呢,宾馆的烤面包机很差,虽然说每次最多可以同时烤k块面包,但是只能烤好这些面包的一个面。
小s要想吃上好吃的面包,就需要把面包的两面都烤好。
小s同学一共想吃n块烤面包,但是小s每天都有好多景点需要游览,她不能在早餐上耽误很长时间,因此,小s同学希望你能告诉她最少需要使用几次烤面包机就可以烤好n块面包。
输入:输入数据仅有一行包含两个用空格隔开的正整数n和k(n, k <=10),n表示小s同学一共要烤n块面包,k表示宾馆的烤面包机一次最多可以同时烤好k块面包的一个面。
输出:仅有一行包含一个整数,表示小s同学至少要用多少次烤面包机。
样例输入3 2 样例输出 3样例解释:假设面包的两面分别标记为A和B,小s同学第一次烤1号和2号面包的A面,第2次烤3号面包的A面和1号面包的B面,第3次烤2号和3号面包的B面,这是使用烤面包机次数最少的方案。
数据范围:10%的数据满足k<=1 50%的数据满足k<=4 100%的数据满足n<=10, k<=103.世博会志愿者的选拔工作正在 A 市如火如荼的进行。
为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。
面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
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复赛模拟练习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 。
2014noip复赛模拟练习1(答案)

【问题描述】请统计某个给定范围[L,R]的所有整数中,数字N出现的次数。
【输入格式】共1行,为三个正整数L、R和N,之间用空格隔开。
(1≤L≤R≤10000)。
【输出格式】仅1行,表示数字N出现的次数。
如输入2 22 2 则输出6var a,b,c,d,e,f,n:integer;beginassign(input,'two.in');reset(input);assign(output,'two.out');rewrite(output);readln(a,b,n);f:=0;d:=0;for c:=a to b dobegine:=c;repeatd:=e mod 10;e:=e div 10;if d=n then inc(f);until e=0;end;writeln(f);close(input);close(output);end.输入2 100 5输出 20 输入 1 1000 9 输出 300输入 2222 2223 2 输出 7 输入 9993 10000 2 输出 02.用自然数1,2,3,4,5,。
构成连续数1234567891011…9899100101…从键盘输入整数m(20000m),输出第m位数字。
样例输入输出:输入:m=15输出:2①m=11②m=194③m=100007④m=199992var p,d,i,j,w,c,m:integer;beginwrite('m=');readln(m);c:=1;i:=1;while c<m do begini:=i+1;w:=1;j:=i;while j>=10 do beginj:=j div 10;w:=w+1;end;c:=c+w;end;d:=c-m+1;for j:=1 to d do beginp:=i mod 10;i:=i div 10;end;writeln(p);end.3.聪明的囚犯:传说从前有一个残暴的国王,喜欢杀戮百姓。
2014noip复赛模拟练习26

1. 设有一架天平,以及有1g,2g,3g,5g,10g,20g的砝码各若干枚(其总重≤1000g)。
问题求解:要求输入a1 a2 a3 a4 a5 a6,表示1g砝码有a1个,2g砝码有a2个,......20g砝码有a6个,打印输出用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况。
输入输出示例:Input : 1 1 0 0 0 0 ‘置0是falseOutput : Total = 3 (表示可以称出1g,2g,3g三种不同的重量)2. 文科生的悲哀背景:化学不及格的Matrix67无奈选择了文科。
他必须硬着头皮准备一次又一次的文科考试。
在这一学期一共有n次文科考试,考试科目有4种,分别为政治、历史、地理和综合。
每次考哪一科是不定的,因此在考试前Matrix67不知道应该去复习哪一科的功课。
他希望能预测出下一次可能考的科目。
于是,他收集到了以往的文科考试的资料。
从以往的考试中,他发现了这样几个规律:1.如果这次考的是政治,那么下一次一定会考历史;2.如果这次考的是综合,那么下一次一定会考地理;3.如果这次考的是历史,那么下一次要么考政治,要么考地理;4.如果这次考的是地理,那么下一次要么考历史,要么考综合。
Matrix67已经知道,本学期的第一次考试科目为政治。
他打算拟定一个可以应对所有可能情况的应考复习计划。
因此,他想知道,整个学期有多少种可能的考试科目安排满足以上规律。
输入格式Input Format 一个正整数n,代表本学期总的考试次数。
输入数据保证n<=10000。
输出格式Output Format 一个正整数,表示符合规律的科目安排方案的总数。
考虑到这个结果可能会很大,因此你只需要输出它mod 7654321的值即可。
3. 经过11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。
当工作半径为0 时,则能够拦截与它位置恰好相同的导弹。
2014noip复赛模拟练习4(答案)

编程输入若干个字符串(以“?”号结束),找出并输出未在此串中出现的所有字母和数字(按ascii码顺序列出,区分大小写)。
输入:一行,一串字符,小于1000 000个。
输出:一行,未在字符串中出现的所有的字母和数字,按ascii码顺序、var p,q:set of char;ch,i:char;beginassign(input,'agger.in');reset(input);assign(output,'agger.out');rewrite(output);p:=['0'..'9','A'..'Z','a'..'z'];q:=[];read(ch);while ch<>'?' dobeginq:=q+[ch];read(ch);end;for i:='0' to '9' doif not(i in q) and (i in p) then write(i);for i:='A' to 'Z' doif not(i in q) and (i in p) then write(i);for i:='a' to 'z' doif not(i in q) and (i in p) then write(i);close(input);close(output);end.或 var p:set of char;ch,i:char;beginassign(input,'agger.in');reset(input);assign(output,'agger.out');rewrite(output);p:=['0'..'9','A'..'Z','a'..'z'];read(ch);while ch<>'?' dobeginif ch in p then p:=p-[ch];Read(ch);end;for i:='0' to 'z' doif i in p then write(i);close(input);close(output);end.输入 XYZabcd123ytFSRUuutaxer?输出0456789ABCDEGHIJKLMNOPQTVWfghijklmnopqsvwz输入 TUIS098734AYUPLMNKasxz?输出1256BCDEFGHJOQRVWXZbcdefghijklmnopqrtuvwy输入 1234567890!!!tyklfgTYKPLKMNNBCVXDERWQAHJIKLRSTUVWXYZ?输出FGOabcdehijmnopqrsuvwxz输入 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqestuvwxyz123456789?输出 0r小明爷爷家有棵苹果树,树上高低不一的长了N个苹果。
2014noip复赛模拟练习14(答案)

查找“支撑数”【试题描述】在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?每行输出5项。
【输入描述】第一行为整数m,表示输入的整数个数。
(3<= m <=100 )第二行为m个整数。
【输出描述】若干个支撑数【输入样例】141 32 4 1 53 9 7 10 8 23 85 43【输出样例】3 4 5 9 1085program ex1135;var a:array[1..100] of longint;i,m,t:integer;beginread(m);for i:=1 to m do read(a[i]);t:=0;for i:=2 to m-1 doif (a[i]>a[i-1]) and (a[i]>a[i+1]) thenbeginwrite(a[i],' ');inc(t);if t mod 5=0 then writeln;end;end.Alunay最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。
于是他把Whitegene作为苦力拽来帮他检查。
由于Whitegene是搞OI的,所以他就想写个程序来判断Alunay完成的数独是否正确。
不过最近他在感情上遇到了一些问题没有功夫去写,就想请你帮他完成这个任务。
数独规则:拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。
在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。
输入格式一个9*9个矩阵输出格式一个数字,1为构成数独,0为不构成数独程序如下:var i,j:longint;shudu:array [1..9,1..9] of longint;beginfor i:=1 to 9 dobeginfor j:=1 to 9 doread(shudu[i,j]);readln;end;case shudu[9,9] of4,5,9:writeln(1);else writeln(0);end;end.图书馆馆长正犯愁呢,原来,有一堆的书要他整理,每本书都有一个书号(<=32767),现在他有一本书,这本书的书号为K(<=32767),现在他要找出一本书号比这本书大的书和书号比这本小的书(但都要最接近图书馆馆长已有的书号),将找到的这两本书的书号加起来,并算出加起来以后的数是否为素数Input第一行二个数为N,K,表示几本书以及手中书的书号(<=32767)第二行开始有N个整数,表示这些书的书号Output第一行一个数,表示两本书书号加起来的和第二行一个字符,表示和是否为素数,若是则输出"Y"否则输出"F"(引号不打出)Sample Input6 56 4 5 3 1 20Sample Output10Fprogram ex1148;var n,k,i,x,s:integer;a:array[0..32767] of integer;f:boolean;beginreadln(n,k);fillchar(a,sizeof(a),0);for i:=1 to n dobeginread(x);a[x]:=1;end;s:=0;for i:=k+1 to 32767 doif a[i]<>0 then begin s:=s+i;break; end;for i:=k-1 downto 1 doif a[i]<>0 then begin s:=s+i;break; end;f:=true;for i:=2 to trunc(sqrt(s)) doif s mod i=0 then begin f:=false;break;end;writeln(s);if f=true then write('Y') else write('F');end.某工厂为制造大型设备购买了一批零件,为了解这批零件工作的稳定性,技术部门对它们进行了故障检测,并记录了每个零件的故障系数(1-1000的整数)。
2014noip复赛模拟练习7(答案)

【问题描述】对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。
【输入文件】输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。
【输出文件】输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。
【样例输入】5 64 2 45 1【样例输出】3【数据规模与约定】对于20%的数据,有N≤10;对于40%的数据,有N≤1000;对于100%的数据,有N≤100000,M≤109,M大于所有数的最小值,A[i]之和不超过109。
【样例说明】将数列如下划分:[4][2 4][5 1]第一段和为4,第2段和为6,第3段和为6均满足和不超过M=6,并可以证明3是最少划分的段数。
varn,m,t,i,a,ans:longint;beginassign(input,'divide_a.in');assign(output,'divide_a.out');reset(input); rewrite(output);readln(n,m);t:=0; ans:=0;for i:=1 to n do beginread(a);if t+a>m then begininc(ans);t:=a;endelseinc(t,a);end;if t<>0 then inc(ans);writeln(ans);close(input); close(output);end.将合数483的各位数字相加(4+8+3)=15,如果将483分解成质因数相乘: 483=3*7*23,把这些质因数各位数字相加(3+7+2+3),其和也为15。
即某合数的各位数字之和等于它所有质因数的各数字之和。
2014noip复赛模拟练习15(答案)

【试题描述】有一组数(设有N个)。
编一程序交换这组数中任意指定的两段。
【输入描述】一个数N(不超过20个)一行N个数由空格分开两个空格分开的数(表示要交换的其中一段)两个空格分开的数(表示要交换的其中另一段)【输出描述】交换后的一行数(中间用空格隔开)【输入样例】163 6 11 45 23 70 67 34 26 89 90 15 56 50 20 103 513 15【输出样例】3 6 56 50 20 70 67 34 26 89 90 15 11 45 23 10program ex1146;var i,j,n,k,a1,b1,a2,b2:integer;a,b:array[0..20] of longint;procedure make(x,y:integer);var i:integer;beginfor i:=x to y dobegininc(k);b[k]:=a[i];end;end;beginreadln(n);for i:=1 to n do read(a[i]);readln(a1,b1);readln(a2,b2);k:=0;make(1,a1-1);make(a2,b2);make(b1+1,a2-1);make(a1,b1);make(b2+1,n);for i:=1 to n do write(b[i],' ');end.142 15 67 89 10 30 54 11 99 77 23 86 47 362 510 13Shuchu 2 77 23 86 47 30 54 11 99 15 67 89 10 361742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。
质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。
需要特别说明的是1不是质数。
2014noip复赛模拟练习13(答案)

考官给出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.063636程序段如下:var a,b,c:LONGINT;function max(a,b,c:LONGint):LONGint;var t:LONGint;begint:=a;//用max函数把三个数排序if b>t then t:=b;if c>t then t:=c;max:=t;end;begin Assign(input,’d1.in’);reset(input); Assign(output,’d1.out’);rewrite(output) ;readln(a,b,c);write(max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c)):0:6);//调用max函数,套题目close(input);close(output);end.输入100 1000 500 输出0.000606输入5678 1234 6789 输出0.000122输入1 1 1 输出0.250000 输入10000 10000 10000 输出0.0000252035年,智能机器人在各行各业中的应用已经十分普遍了,毕竟它做事时的精度与力量比一个普通人是强多了。
王涛的运输队里就有一个,是用来装卸货物的。
2014noip复赛模拟练习24

1. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入格式:只有一行,一个正整数n。
对于100%的数据,n<10^6输出格式:输出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。
如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。
此外,序列不允许重复,序列内的整数用一个空格分隔。
如果没有符合要求的序列,输出“NONE”。
样例输入:15 输出1 2 3 4 54 5 67 8 输入8 输出NONE2.给定一个仅包含小写字母的英文单词表,其中每个单词最多包含50个字母。
如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链。
例如下面的单词组成了一个词链:iintinteger 而下面的单词不组成词链:integerintern请在给定的单词表中取出一些词,组成最长的词链。
最长的词链就是包含单词数最多的词链。
数据保证给定的单词表中,单词互不相同,并且单词按字典顺序排列。
【输入格式】第一行一个整数n(n<=10000),表示单词表中单词数,下接n行每行一个单词。
【输出格式】一个整数,表示最长词链长度。
【样例输入】5iintintegerinterninternet 【样例输出】43. 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。
对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。
2014noip复赛模拟练习28

一、数字“4”和“7”是幸运数字,那么仅用幸运数字组成的整数就是幸运整数,请你帮助找出第k个幸运整数。
输入k,输出第k个整数。
输入输出样例:输入: 3 (k ≤ 30)输出:44二、小薇过生日请了许多朋友吃匹萨饼。
但这些朋友太小吃不下完整的一个匹萨,不过他们都确切知道自己能吃的一份:1/4、1/2或3/4个匹萨,只有这三种可能。
编写程序计算:满足这些小朋友要预定的最少的匹萨饼个数。
输入输出样例:输入:5 (共有5个小朋友)(小朋友个数≤100)1/2 (第1个小朋友能吃1/2个匹萨饼)1/4 (第2个小朋友能吃1/4个匹萨饼)3/4 (第3个小朋友能吃3/4个匹萨饼)1/4 (第4个小朋友能吃1/4个匹萨饼)1/2 (第5个小朋友能吃1/2个匹萨饼)输出:3 (最少预定3个)三、士兵排队问题:有N个士兵(1<=N<=100),编号依次为1,2,...,N.队列训练时,指挥官要把士兵从高到矮排成一行,但指挥官只知道“1 比2 高,7 比5高”这样的比较结果。
输入文件:第一行为数N(N〈=100);表示士兵的个数。
以下若干行每行两个数A,B 表示A高于B。
输出文件:给出一个合法的排队序列。
四、看球的巴士描述:两个球队的支持者要一起坐车去看球,他们已经排成了一列。
我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的。
为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D。
有一个例外,就是一辆车上的人全部都是一个球队的支持者。
问要将这N个人全部送至球场,至少要几辆巴士。
输入格式Input Format第一行是整数N和D,1<=N<=2500,1<=D<=N。
接下来的N行,按排队的顺序,描述每个人支持的球队,用H或J表示。
输出格式Output Format至少要几辆巴士。
样例输入Sample Input14 3HJHHHJHJHHHHHH样例输出Sample Output2注释:有多种方案,例如让前9人做一辆车,差正好是3;后5人做一辆车,因为只有一对的支持者。
NOIP2014提高组复赛试题day1day2

CCF全国信息学奥林匹克联赛(NOIP2014)复赛提高组 day11.生活大爆炸版石头剪刀布(rps.cpp/c/pas)【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
如果两个人出拳一样,则不分胜负。
在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
表一石头剪刀布升级版胜负关系乙剪刀石头布蜥蜴人斯波克甲对乙的甲结果剪刀平输赢赢输石头平输赢输布平输赢蜥蜴人平赢斯波克平现在,小A和小B尝试玩这种升级版的猜拳游戏。
已知他们的出拳都是有周期性规律的,但周期长度不一定相等。
例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”已知小A和小B一共进行N次猜拳。
每一次赢的人得1分,输的得0分;平局两人都得0分。
现请你统计N次猜拳结束之后两人的得分。
【输入】输入文件名为rps.in。
第一行包含三个整数:N,NA,NB,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。
数与数之间以一个空格分隔。
第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。
其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”, 4表示“斯波克”。
数与数之间以一个空格分隔。
【输出】输出文件名为rps.out。
输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。
【输入输出样例1】rps.in rps.out10 5 66 20 1 2 3 40 3 4 2 1 0【输入输出样例2】rps.in rps.out4 49 5 50 1 2 3 41 0 32 4【数据说明】对于100%的数据,0 < N ≤ 200,0 < NA ≤ 200, 0 < NB ≤ 200。
2014noip复赛模拟练习5(答案)

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

1. TOM有一个无穷序列中如下:110100100010000100000。
请你帮助TOM找出在这个无穷序列中指定位置上的数字输入格式Input Format第一行一个正整数N,表示询问的次数;接下来的N行一个正整数Ai,Ai表示在序列中的位置。
输出格式Output FormatN行,每一行为0或1,表示序列第Ai位上的数字。
对于100%的数据有N<=1500000,Ai<=10^9var n,i:longint;x,z,y:int64;begin readln(n);for i:=1 to n do beginreadln(x); z:=(x-1)*2; y:=trunc(sqrt(z));if z=y*(y+1) then writeln('1') else writeln('0');end;readln;readln;end.输入 39910111输出0 0 1输入 57 1024 15 10000 4 输出1 0 0 0 12. 输入一个正整数N(1 <= N <=20)后,可以得到一个N*N的数字螺旋方阵,分别求该方阵中的主对角线与副对角线上的数字之和S,P,输出S、P的差。
例如:N=5 得到的数字螺旋方阵如下:1 2 3 4 5 其中:主对角线从左上角到右下角,得到 16 17 18 19 6 的数字之和为:S=1+17+25+21+9=73 15 24 25 20 7 副对角线从右上角到左下角,得到 14 23 22 21 8 的数字之和:P=5+19+25+23+13=85 13 12 11 10 9 S-P= - 12Input 一个正整数NOutput主对角线与副对角线上的数字之和的差。
Sample Input 5Sample Output -12var n,i,j,t,f,l,q,z:integer;s1,s2:longint;a:array[1..20,1..20] of integer;beginreadln(n);t:=1; f:=1; l:=n;i:=1;q:=1;z:=n;while t<=n*n dobegincase f of1:beginfor j:=q to z do begin a[i,j]:=t;inc(t);end;f:=2; q:=i+1;dec(l); z:=l+q-1;end;2:beginfor i:=q to z do begin a[i,j]:=t;inc(t);end;f:=3;q:=j-1; z:=q-l+1;end;3:beginfor j:=q downto z do begin a[i,j]:=t;inc(t); end;f:=4;q:=i-1;dec(l);z:=q-l+1;end;4:beginfor i:=q downto z do begin a[i,j]:=t;inc(t); end;f:=1;q:=j+1;z:=q+l-1;end;end;end;s1:=0;s2:=0;for i:=1 to n do s1:=s1+a[i,i];for i:=n downto 1 do s2:=s2+a[n-i+1,i];writeln(s1-s2);end. 输入 7 输出 -24输入 20 输出 -200 输入 12 输出-7215 输出 -1123.字母A,B,C的所有可能的组合(按字典顺序排序)是:A, AB,ABC,AC,B,BC,C每个组合都对应一个字典顺序的序号,如下所示:1A2AB3ABC4AC5B6BC7C找出某个字母组合的字典序号。
2014noip复赛模拟练习21(附答案)

趣味填空Description 小华的寒假作业上,有这样一个趣味填空题:给出用等号连接的两个整数,如“1234=127”。
当然,现在这个等号是不成立的。
题目让你在左边的整数中间某个位置插入一个加号,看有没有可能让等号成立。
以上面的式子为例,如果写成123+4=127,这就可以了。
请你编写一个程序来解决它。
Input 只有那个不相等的式子。
已知,等号两边的整数都不会超过2000000000。
Output 如果存在这样的方案,请输出那个正确的式子。
如果不存在解决方案,请输出“Impossible!”(引号中的部分)。
Sample Input 1234=127Sample Output 123+4=127program ex1075;var i,len,p:integer; a1,a2,b:longint;st,st1,st2,st3:string;begin readln(st); p:=pos('=',st); st1:=copy(st,1,p-1);delete(st,1,p); val(st,b); len:=length(st1); for i:=1 to len-1 do beginst2:=copy(st1,1,i); val(st2,a1); st3:=copy(st1,i+1,len-i); val(st3,a2);if a1+a2=b then begin writeln(a1,'+',a2,'=',b);exit; end;end; writeln('Impossible!')end.输入3578=3560 输出Impossible输入32468=500 输出32+468=500输入9888876593=988887662 输出988887659+3=988887662旋转单词Description今天的英语课,王老师为了复习以前学过的单词,提高学生的学习兴趣,想出了一个主意:读入M组数据,其中每组数据有一个单词L(单词长度<=36个字符)和一个整数N (0<=N<=36),从该单词最末位开始逐位移到单词的开头,如果还没达到N值,则再从末位开始移动,直到达到N值为止,求移N位后的新单词。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF全国信息学奥林匹克联赛(NOIP2014)复赛
提高组 day1
1.生活大爆炸版石头剪刀布
(rps.cpp/c/pas)
【问题描述】
石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
如果两个人出拳一样,则不分胜负。
在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:
斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
表一石头剪刀布升级版胜负关系
乙
甲对乙的
剪刀石头布蜥蜴人斯波克
甲结果
剪刀平输赢赢输
石头平输赢输
布平输赢蜥蜴人平赢
斯波克平
现在,小A和小B尝试玩这种升级版的猜拳游戏。
已知他们的出拳都是有周期性规律的,但周期长度不一定相等。
例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B 以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”
已知小A和小B一共进行N次猜拳。
每一次赢的人得1分,输的得0分;平局两人都得0分。
现请你统计N次猜拳结束之后两人的得分。
【输入】
输入文件名为rps.in。
第一行包含三个整数:N,NA,NB,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。
数与数之间以一个空格分隔。
第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。
其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”, 4表示“斯波克”。
数与数之间以一个空格分隔。
【输出】
输出文件名为rps.out。
输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。
【输入输出样例1】
rps.in rps.out
6 2
10 5 6
0 1 2 3 4
0 3 4 2 1 0
【输入输出样例2】
rps.in rps.out
4 4
9 5 5
0 1 2 3 4
1 0 3
2 4
【数据说明】
对于100%的数据,0 < N ≤ 200,0 < NA ≤ 200, 0 < NB ≤ 200。
2.联合权值
(link.cpp/c/pas)
【问题描述】
无向连通图G有n个点,n-1条边。
点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1。
图上两点(u, v)的距离定义为u点到v点的最短距离。
对于图G上的点对(u, v),若它们的距离为2,则它们之间会产生W u×W v的联合权值。
请问图G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少?
【输入】
输入文件名为link.in。
第一行包含1个整数n。
接下来n-1行,每行包含2个用空格隔开的正整数u、v,表示编号为u和编号为v的点之间有边相连。
最后1行,包含n个正整数,每两个正整数之间用一个空格隔开,其中第i个整数表示图G上编号为i的点的权值为Wi。
【输出】
输出文件名为link.out。
输出共1行,包含2个整数,之间用一个空格隔开,依次为图G上联合权值的最大值和所有联合权值之和。
由于所有联合权值之和可能很大,输出它时要对10007取余。
【输入输出样例】
link.in link.out。