NOIP2014普级组复赛试题
2014noip复赛模拟练习27
1. 被7整除描述:要求输出从1到n(1<=n<=10^6),有多少个整数n,满足2^n-n^2能被7整除输入格式Input Format 一个数n输出格式Output Format 一个数,即满足的个数样例输入2样例输出12. 在A、B两个城市之间设有N个路站(如下图中的S1,且N<100),城市与路站之间、路站和路站之间各有若干条路段(各路段数<=20,且每条路段上的距离均为一个整数)。
A,B的一条通路是指:从A出发,可经过任一路段到达S1,再从S1出发经过任一路段,…最后到达B。
通路上路段距离之和称为通路距离(最大距离<=1000)。
当所有的路段距离给出之后,求出所有不同距离的通路个数(相同距离仅记一次)。
例如:下图所示是当N=1时的情况:从A到B的通路条数为6,但因其中通路5+5=4+6,所以满足条件的不同距离的通路条数为5。
3. 一台打字机准备将1到10^n的数依次打出。
在打印过程中,这台打字机出现了一个故障:数字“3”打不出来。
因此,所有含有数字“3”的数都没有被正确地打出。
试问没有被正确打出的数一共有多少个。
输入数据输入一个正整数n。
输出数据输出从1到10^n这些数中不能被正确打印的数的个数。
输入样例2输出样例19数据规模n<=10004. 问题描述: 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
输入数据输入一个正整数S。
输出数据输出最大的约数之和。
样例输入样例输出9样例说明取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。
数据规模S<=10005. 流感会结束吗?问题描述:八中一共有n个学生。
这n个学生里一共有m对朋友关系。
在流感发作期,每个健康学生都要看望当天他生病的朋友(如果有的话),并在第二天被传染上疾病(除非他在免疫期内);每个生病的学生在第二天都会痊愈,并在这一天具有免疫性。
从第三天起,看望生病的朋友将再次使他染上流感。
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%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
noip2014普及组复赛题解
1.珠心算测验注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。
这样的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int a[105];int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int res=0;for(int i=1; i<=n; i++){int ok=0;for(int j=1; j<=n && !ok; j++) if(j!=i){for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){if(a[j]+a[k]==a[i]) ok=1;}}res+=ok;}printf("%d\n",res);return 0;}2.比例简化L很小,还是枚举,然后比较的话建议用乘法比较,避免精度问题:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int A,B,L;int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}int main(){freopen("ratio.in","r",stdin);freopen("ratio.out","w",stdout);scanf("%d%d%d",&A,&B,&L);int ba=1000000,bb=1;for(int i=1; i<=L; i++){for(int j=1; j<=L; j++){if(gcd(i,j)==1 && i*B>=j*A){if(ba*j>=bb*i){ba=i, bb=j;}}}}printf("%d %d\n",ba,bb);return 0;}3.螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。
2014noip复赛模拟练习1
1.【问题描述】请统计某个给定范围[L,R]的所有整数中,数字N出现的次数。
【输入格式】共1行,为三个正整数L、R和N,之间用空格隔开。
(1≤L≤R≤10000)。
【输出格式】仅1行,表示数字N出现的次数。
如输入2 22 2 则输出62.用自然数1,2,3,4,5,。
构成连续数1234567891011…9899100101…从键盘输入整数m(20000m),输出第m位数字。
样例输入输出:输入:m=15输出:23. 聪明的囚犯:传说从前有一个残暴的国王,喜欢杀戮百姓。
有一次,他抓到30个百姓并要一一杀掉。
在这30个百姓中间有一个聪明人,他站出来对国王说:“请国王打发慈悲,赦免两个人不死。
”国王问:“赦免哪两个人不死?”那个聪明人回答说:“我们30个人围成一圈,从1开始报数,凡数到5的人就拉出去杀掉,剩下的人继续从1开始报数,循环反复,直到剩下两个人为止,这两个人被赦免。
”国王一听很有意思,就同意了聪明人的建议,叫这30个百姓围成一圈,依依报数,凡数到5的就杀掉。
最后只剩下两个人没有被杀掉,而聪明人就是其中之一。
编写程序,输入N个百姓,由计算机判断一下,聪明人要站在什么位置,才能躲过这场屠杀。
如输入N=30则输出14 34. 算盘,这个古老的计算工具是我国古代的重要发明。
在算盘上,一个档相当于整数的一位,高位在左边,所以,从右向左数,各档依次表示个位、十位、百位、……,在每个档上,靠框的珠不参与计数,靠梁的珠参与计数,且梁上面的珠每个表示5,梁下面的珠每个表示1,并规定0用本档上所有的珠都靠框来表示。
根据这个规则,上面的算盘就表示拨入了一个整数123456789(其它的档,认为是0)。
算盘的初始状态是所有的珠都靠框,即所有档上都是0。
请编写程序计算一下,从初始状态拨入一个整数n(位数≤17),一共需要拨动多少个珠?样例输入:8102 样例输出:75. 现在有一个长度为N(1<=N<=1000)的并且每个数只可能是1或2或3的数列,求至少要交换多少次,才能得到一个升序的序列。
2014noip复赛模拟练习10
1. 喜羊羊运动会——撑杆跳高:运动会马上就要开始了,撑杆跳高场地上,羊村的N(3 <= N <= 100 )个村民正排成一队有秩序地练习。
“好高啊,我都不知道自己能不能跳过去”,懒羊羊慢条斯理地说道。
“这么高,不知道最少要几只羊叠在一起才会够得着”,沸羊羊向来比较喜欢思考数学问题,这样说道。
试编一程序,计算出最少要几只羊叠在一起(一头羊踩在另一头羊的背上)才能够得着横杆(所谓够得着,指羊的身高总和不小于横竿的高度B)。
如果N头羊叠在一起,都够不着横竿,则输出“Impossible”【输入描述】第一行:两个整数N(3 <= N <= 100 )和B,表示队伍中羊的总数以及横竿的高度。
第二行:空格隔开的N个整数,表示每只羊的身高Hi (1 <= Hi <= 10000 )。
【输出描述】一行,一个整数,表示最少要几头羊才能够到横竿。
如果N只羊叠在一起都够不着则输出“Impossible”。
【输入样例】样例1:5 23↙6 8 1 3 9 样例2:6 16↙1 2 3 1 3 5 【输出样例】样例1:3 样例2:Impossible2. 在一棵树上有n只鸟。
由于感受到了自然的力量,它们希望学习自然数。
因此它们站在树上,演唱所有自然数。
自然数是从1开始的,按照递增的顺序演唱。
当演唱到K时,会有K只鸟受不了而飞走。
如果演唱到某个自然数而鸟数不足时,它们会从1开始重新演唱。
假设每秒钟它们都会演唱一个自然数,请你求一求,所有鸟都飞走需要多长时间。
如输入 3 输出2 输入 4 输出3【样例说明】第一秒,一只鸟飞走。
第二秒,两只鸟飞走。
第三秒时,需要三只鸟,但只剩一只鸟,因此它会从1开始演唱,并且飞走。
3. 彩票摇奖(LOTTERY.PAS) 为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。
该彩票的规则是:(1) 每张彩票上印有7 个各不相同的号码,且这些号码的取指范围为1~33。
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普及组复赛测试(答案)
老师给笑笑布置了一份作业,笑笑不知如何解决。
老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。
【输入文件】:第一行包含一个整数n,表示数列的长度。
(n<=100000)第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。
【文件输出】:文件中只有一个整数,为最大的连续段总和。
【输入样例】:51 -23 1 -4【输出样例】4vars:array[1..10000] of longint;n,ii,t,ans:longint;beginreadln(n);for i:=1 to n doread(s[i]);t:=s[1];ans:=s[1];for i:=2 to n dobeginif t<0 then t:=s[i] else t:=t+s[i];if t>ans then ans:=t;end;writeln(ans);end.输入61 5 4 -2 63 输出17输入1024 -12 9 11 7 20 -8 15 3 18 输出87输入710 8 9 -5 12 6 11 输出51输入205 12 19 20 -7 -6 18 22 19 8 11 33 15 32 17 -30 4 14 24 -13输出230【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。
这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。
在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。
有经验的多多一眼就能看出,每棵花生植株下的花生有多少。
为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。
”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1)从路边跳到最靠近路边(即第一行)的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边(即第一行)的某棵花生植株跳回路边。
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复赛模拟练习17
1.神舟号飞船在完成宇宙探险任务回到地球后,宇航员张三感觉身体不太舒服,去了医院检查,医生诊断结果:张三体内基因已被改变,原有人体基因序列中已经被渗入外星球不明异形生物基因,但可喜的是,这些异形基因都有一个共同的特征,就是该基因序号的平方除以7的余数都是1,要赶快清除掉,否则会危害整个人类。
赶快行动吧。
【输入描述】第一行是一个整数n(基因个数)第二行是n个整数(张三的基因序列)【输出描述】去除异形基因后的正常序列,空格隔开【输入样例】4↙6 2 8 12【输出样例】 2 122.羊村好久没有举行大型活动了,于是喜羊羊提议举办一次运动会。
为了和国际接轨,决定给运动会取个响亮的名字(冠名)。
那么起个什么名字呢?有人提议,既然这次活动是喜羊羊发起的,那就叫“喜羊羊运动会”吧。
随之有很多羊附和表示同意,但也有一部分羊提出反对意见,认为喜羊羊虽然聪明,但资历太浅,不够格。
正当大家吵得不可开交时,慢羊羊村长大声喊道:“停——,打住,既然大家意见不统一,那么我们来投票吧。
如果支持喜羊羊的票数达到或超过总票数的一半,那就叫喜羊羊运动会”。
村长的意见得到了大家的一致赞同(姜还是老的辣,关键时刻还得慢羊羊村长才镇得住)。
可是参加投票的村民太多了,统计投票结果是一件费时且费力的事情,于是慢羊羊村长找到了你,请你设计一个程序统计同意以“喜羊羊”为名的票数,达到要求则输出“XiYangYang”,否则输出“Other”。
输入:第一行:一个整数N(5 <= N <= 10000 ),表示参加投票的村民总数。
第二行:空格隔开的N个整数。
这些整数要么为0,要么为1。
(0表示不同意,1表示同意)输出:一行。
达到票数要求则输出“XiYangYang”,未达到则输出“Other”。
样例输入样例1:5↙0 1 1 1 0样例2:6↙0 1 0 1 0 0样例输出样例1:XiYangYang样例2:Other3.放暑假了,小明想上网下载一些电影看,但是缓慢的网速令他无法忍受。
2014noip复赛模拟练习25
给定一连串整数,依次由1个1、2个2、3个3等组成,现在给定两个整数A和B,求出由第A个到第B个数的和。
例如A是1,B是3,答案是1+2+2=5。
要求给出一个问题,然后计算它们的和。
输入格式:输入文件共一行,包括正整数A和B,1≤A≤B≤1000。
输出格式:输出文件共一行,为和的值。
输入样例1:1 3输出样例1:5输入样例2:3 7输出样例2:15var a,b,k,i,j,total:longint;c:array[1..1100]of longint;begin readln(a,b);i:=1;k:=0;while k<b do beginfor j:=1 to i do c[k+j]:=i;k:=k+i;inc(i);end;for i:=a to b dobegin write(c[i],' ');total:=total+c[i];end;writeln(total);end.输入 1 30 输出 156 输入 20 100 输出 866输入 112 500 输出 9439 输入 900 1000 输出 4403若某不含数字0的三位正整数,其平方数至少有三位同样的数字,则称该三位数为三重数。
例如,由于:5112=261121(有三位1),所以511为三重数。
输入N,求前N个三重数,并输出这些三重数之和。
如输入5则输出119 131 149 165 168HE=732 vari,j,k,a,b,c,x,n,count,s,GS:longint;aa:array[1..5]of integer;beginwriteln; READ(GS);s:=0; count:=0;for i:=111 to 316 dobegina:=i div 100; b:=(i div 10) mod 10; c:=i mod 10;if ((a<>0)and(b<>0)and(c<>0)) thenbeginx:=i*i;aa[1]:=x div 10000;aa[2]:=(x div 1000) mod 10;aa[3]:=(x div 100) mod 10;aa[4]:=(x div 10) mod 10;aa[5]:=x mod 10;for j:=1 to 3 dobeginn:=1;for k:=j+1 to 5 doif aa[j]=aa[k] then n:=n+1;if n>2 then begin writeln(i:8,x:8); s:=s+i; count:=count+1; break; end;end;end;if count=GS then break;end;writeln(s:8);end.输入7 输出119 131 149 165 168 173 212 HE=1117输入10 输出119 131 149 165 168 173 212 216 235 258HE=1826输入12 输出119 131 149 165 168 173 212 216 235 258 264 298 HE=2388输入13 输出119 131 149 165 168 173 212 216 235 258 264 298 313HE=2701对容量为C的背包进行装载,从N个物品中选取装入背包的物品,每件物品I(1≤I≤N)的重量为WI,价值为PI,在满足背包中所有物品的总重量不能超过背包的容量的前提下,使所装入的物品价值取得最大值。
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人做一辆车,因为只有一对的支持者。
2014noip复赛模拟练习4
1.输入若干个字符串(以“?”号结束),找出并输出未在此串中出现的所有字母和数字(按ascii码顺序列出,区分大小写)。
输入:一行,一串字符,小于1000 000个。
输出:一行,未在字符串中出现的所有的字母和数字,按ascii码顺序、2.新兵入队的日子是YY年MM月DD日,他们觉得这个日子特别有意义,所以决定过n天搞一次活动来纪念这个日子,可是他们不知道n天后是什么日子,所以请你帮忙计算一下日期(入队日算第0天)。
输入数据:文件第一行读入n (0<=n<=50000)从文件的第二行分别读入YY,MM,DD其中1949<=YY<=1992,日期绝对合法。
输出数据:输出文件只有一行,即CCC老师生日第一万天以后的日期,格式为“Y-M-D”。
样例输入100001979 4 16样例输出:2006-9-13. 小明爷爷家有棵苹果树,树上高低不一的长了N个苹果。
一天,M个小朋友到爷爷家做客,爷爷说:你们每人最多可以摘两个苹果,而且只许伸手摘,不允许借助其它工具,摘下的苹果大家分享。
由于小朋友的身高参差不齐,怎样才能使他们摘的苹果总数最多呢?请你计算机小朋友们最多能摘到多少个苹果?输入:N M(N<=100,M<=20)N个整数(以空格相隔),分别表示每个苹果的高度M个整数(以空格相隔),分别表示每个小朋友伸手能达到的高度。
输出:一个整数例如:输入:10 4110 100 150 90 100 135 160 88 130 140120 100 110 80 输出:54.笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。
但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
2014noip复赛模拟练习3
1.陶陶很喜欢数学,尤其喜欢奇怪的数。
一天,他突然发现,有的整数拥有的因子数是很有个性的,决定找到一个具有n个正因子数的最小的正整数。
例如:n=4,则m=6,因为6有4个不同正整数因子1,2,3,6;而且是最小的有4个因子的整数。
【输入文件】仅一个数n(1≤n≤60)【输出文件】仅一个数m【样例输入】4【样例输出】62.由文件给出n个1~30000的无序数正整数,其中1≤N≤10000,同一个正整数可能会出现多次,出现次数最多的整数称为众数,找出其中的众数及它出现的次数。
输入格式:输入文件masses.in 第一行是正整数的个数N,第二行开始为N个正整数。
输出格式:输出文件masses.out有若干行,每行两个数,第1个是众数,第2个是众数出现的次数。
样例输入:3018 2 10 1 1 15 6 13 3 3 11 18 2 12 15 13 18 17 15 19 8 3 15 17 11 16 14 8 7 16样例输出:15 43.在n个一连串的方格内填写字母A或B,但相邻两格内不能都填B。
求所有可能的填写方案数。
例如,当n=3,可能的方案有AAA、AAB、ABA、BAA、BAB等5种。
输入N输出方案数。
样例输入15 输出15974. 我们把t1,t2(包括t1, t2(1<=t1<t2<=10000000))之间的所有数的约数个数和n称为t1,t2的shlqsh数;问题是给出数据t1,t2后,求t1,t2的shlqsh数;【输入文件】输入文件shlqsh.in 仅包含一行,共有两个整数,表示t1 t2 (用空格分开)【输出文件】输出文件shlqsh.out 仅有一个整数,表示t1 , t2之间的shlqsh数。
【输入样例】 2 6 【输出样例】13样例说明:(说明部分不必输出)2的约数有1,2 (2个);3的约数有1,3 (2个);4的约数有1,2,4 (3个);5的约数有1,5 (2个);6的约数有1,2,3,6 (4个)。
NOIP2014普及组复赛试题解答
NOIP2014普及组复赛试题解答NOIP2014普及组复赛试题解答1.珠心算测验#includeusing namespace std;int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);int n;scanf("%d",&n);int a[n+1],j,k,out=0;bool pd=false;for(int i=1;i<=n;++i)scanf("%d",&a[i]);for(int i=1;i<=n;++i){j=1;do{k=1;do{if((i!=j)&&(j!=k)&&(k!=i)&&(a[i]==a[j]+a[k])) {out++;pd=true;}k++;}while(k<=n&&pd==false);j++;}while(j<=n&&pd==false);pd=false;}printf("%d",out);fclose(stdin);fclose(stdout);return 0;}2.比例简化考虑到输出结果必须是最贴近原比值且互质的一对正整数,如果采用除法再取整,则会导致结果偏差较大。
由于1≤L≤100,可以枚举其所有组合,再在枚举结果中取最贴近的那一对正整数。
可以用二维数组的下标来存储A',B'的值,二维数值元素存储A'/B'与A/B的差值。
①读取A、B、L的值;②考虑极端情况B/A>L,当出现此情况时,直接将赋值A'=1;B'=L,以减少计算时间;③枚举所有A'/B'的值,并存储在二维数组元素s[A'][B']中;④求二维数组的最小值;⑤输出A' B'。
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复赛模拟练习15
1.【试题描述】有一组数(设有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 102.1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。
质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。
需要特别说明的是1不是质数。
这就是哥德巴赫猜想。
欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。
从此,这道数学难题引起了几乎所有数学家的注意。
哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。
现在请你编一个程序验证哥德巴赫猜想。
【输入描述】仅有一行,包含一个正奇数n,其中n大于9并且小于10000。
【输出描述】仅有一行,输出3个质数,这3个质数之和等于输入的奇数。
相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。
如果表示方法不唯一,请输出第一个数最小的方案,如果第一个数最小的方案不唯一,请输出第二个数最小的方案。
【输入样例】2009【输出样例】 3 3 20033.2008北京奥运会之前,很多人想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N,求一个最小的正整数M,使得N×M的十进制表示形式里只有1和0。
【输入格式】只有一行,输入一个整数N。
(m,N≤100000)【输出格式】输出一行,如果有解,输出最小的M,否则输出”No Solution”【样例输入】12【样例输出】9254. 任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。
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位后的新单词。
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位表现最佳同学的编号,然后不记名投票。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF全国信息学奥林匹克联赛(NOIP2014)复赛
普及组
(请选手务必仔细阅读本页内容)
一.题目概况
中文题目名称珠心算测试比例简化螺旋矩阵子矩阵
英文题目与子目录名count ratio matrix submatrix 可执行文件名count ratio matrix submatrix 输入文件名count.in ratio.in matrix.in submatrix.in 输出文件名count.out ratio.out matrix.out submatrix.out 每个测试点时限1秒1秒1秒1秒测试点数目10 10 10 20 每个测试点分值10 10 10 5 附加样例文件有有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统运行内存上限128M 128M 128M 128M
二.提交源程序文件名
对于C++语言count.cpp ratio.cpp matrix.cpp submatrix.cpp 对于C语言count.c ratio.c matrix.c submatrix.c 对于pascal语言count.pas ratio.pas matrix.pas submatrix.pas
三.编译命令(不包含任何优化开关)
对于C++语言g++ -o count
count.cpp -lm g++ -o ratio
ratio.cpp -lm
g++ -o matrix
matrix.cpp -lm
g++ -o submatrix
submatrix.cpp -lm
对于C语言gcc -o count
count.c -lm gcc -o ratio ratio.c
-lm
gcc -o matrix
matrix.c -lm
gcc -o submatrix
submatrix.c -lm
对于pascal语言fpc count.pas fpc ratio.pas fpc matrix.pas fpc submatrix.pas
注意事项:
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下进行,各语言的编译器版本以其为
准。
1. 珠心算测验
(count.cpp/c/pas)
【问题描述】
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。
珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。
他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
【输入】
输入文件名为count.in。
输入共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。
第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
【输出】
输出文件名为count.out。
输出共一行,包含一个整数,表示测验题答案。
【输入输出样例】
count.in count.out
2
4
1 2 3 4
【样例说明】
由1+2=3,1+3=4,故满足测试要求的答案为2。
注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】
对于100%的数据,3 ≤n≤100,测验题给出的正整数大小不超过10,000。
2.比例简化
(ratio.cpp/c/pas)
【问题描述】
在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。
例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。
不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。
因为这个比例的数值太大,难以一眼看出它们的关系。
对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。
现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’≥A/B 且A’/B’ - A/B的值尽可能小。
【输入】
输入文件名为ratio.in。
输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。
【输出】
输出文件名为ratio.out。
输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。
【输入输出样例】
ratio.in ratio.out
1498 902 10 5 3
【数据说明】
对于100%的数据,1 ≤A≤1,000,000,1 ≤B≤1,000,000,1 ≤L≤100,
A/B≤L。
3. 螺旋矩阵
(matrix.cpp/c/pas)
【问题描述】
一个n行n列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。
根据经过顺序,在格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。
下图是一个n = 4 时的螺旋矩阵。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。
【输入】
输入文件名为matrix.in。
输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
【输出】
输出文件名为matrix.out。
输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。
【输入输出样例】
matrix.in matrix.out
4 2 3 14
【数据说明】
对于50%的数据,1 ≤n≤100;
对于100%的数据,1 ≤n≤30,000,1 ≤i≤n,1 ≤j≤n。
4. 子矩阵
(submatrix.cpp/c/pas)
【问题描述】 给出如下定义:
1. 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。
例如,下面左图中选取第2、4行和第2、4、5列交叉位置的元素得到一个2*3的子矩阵如右图所示。
的其中一个2*3的子矩阵是
2. 相邻的元素:矩阵中的某个元素与其上下左右四个元素(如果存在的话)是相邻的。
3. 矩阵的分值:矩阵中每一对相邻元素之差的绝对值之和。
本题任务:给定一个n 行m 列的正整数矩阵,请你从这个矩阵中选出一个r 行c 列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值。
【输入】
输入文件名为submatrix.in 。
第一行包含用空格隔开的四个整数n ,m ,r ,c ,意义如问题描述中所述,每两个整数之间用一个空格隔开。
接下来的n 行,每行包含m 个用空格隔开的整数,用来表示问题描述中那个n 行m 列的矩阵。
【输出】
输出文件名为submatrix.out 。
输出共1行,包含1个整数,表示满足题目描述的子矩阵的最小分值。
【输入输出样例1】 submatrix.in submatrix.out 5 5 2 3 9 3 3 3 9 9 4 8 7 4 1 7 4 6 6 6 8 5 6 9 7 4 5 6 1
6
【输入输出样例1说明】
该矩阵中分值最小的2行3列的子矩阵由原矩阵的第4行、第5行与第1列、第3列、
9 3 3 3 9 9 4 8 7 4 1 7 4 6 6 6 8 5 6 9 7
4
5
6
1
4 7 4 8 6 9
第4列交叉位置的元素组成,为656
756,其分值为6−5+5−6+7−5+5−6+
6−7+5−5+ 6−6=6。
【输入输出样例2】
submatrix.in submatrix.out
7 7 3 3
7 7 7 6 2 10 5
5 8 8 2 1
6 2
2 9 5 5 6 1 7
7 9 3 6 1 7 8
1 9 1 4 7 8 8
10 5 9 1 1 8 10
1 3 1 5 4 8 6
16
【输入输出样例2说明】
该矩阵中分值最小的3行3列的子矩阵由原矩阵的第4行、第5行、第6行与第2列、
第6列、第7列交叉位置的元素组成,选取的分值最小的子矩阵为978 988 5810
【数据说明】
对于50%的数据,1≤n≤12,1≤m≤12,矩阵中的每个元素1≤a i j≤20;对于100%的数据,1≤n≤16,1≤m≤16,矩阵中的每个元素1≤a i j≤1000, 1≤r≤n,1≤c≤m。