2014noip复赛模拟练习10
NOIP2014普级组复赛试题

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 countcount.cpp -lm g++ -o ratioratio.cpp -lmg++ -o matrixmatrix.cpp -lmg++ -o submatrixsubmatrix.cpp -lm对于C语言gcc -o countcount.c -lm gcc -o ratio ratio.c-lmgcc -o matrixmatrix.c -lmgcc -o submatrixsubmatrix.c -lm对于pascal语言fpc count.pas fpc ratio.pas fpc matrix.pas fpc submatrix.pas注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2014noip复赛模拟练习11(答案)

新学年就要开始了,爸爸把N元钱给了小青,让他购买一批文具,并作了以下要求:只能买圆珠笔、铅笔和铅笔芯,并且每样至少买一支,总数要超过30支,而且钱要全部花完。
当小青去到文具店时,发现圆珠笔8角钱一支、铅笔2角钱一支、铅笔芯1角钱一支。
小青怎么买才能符合爸爸的要求呢?请你编个程序帮他算出符合购买要求的所有方案总数。
Input一个整数N,表示购买文具一共的元数。
(1 <= N <= 50)Output一个整数,即符合购买要求的所有方案总数。
Sample Input 8Sample Output 135Sourceprogram ex1294;var n,i,j,k,sum:integer;beginreadln(n);n:=n*10;sum:=0;for i:=1 to n div 8 dofor j:=1 to n div 2 dobegink:=n-i*8-j*2;if (i+j+k>30) and (k>1) then inc(sum);end;writeln(sum);end.任意一个数都可以由1、2、3三个数组合而成。
如4有以下7种组合方案:1 + 1 + 1 + 11 + 1 + 21 +2 + 12 + 1 + 12 + 21 + 33 + 1你的问题来了,对于给定的一个数,请你计算出这个整数可以有多少个组合方案,其和由1、2、3组合而成。
数据输入输入包含多组数据,每一组数据中,输入数据的第一行为一个整数n(1<=n<=20),要分解的数。
数据输出这个整数的分解的组合数。
样例输入4样例输出7分析用f(n)表示将n按照1、2、3分解的方法数当n=1时,f(1)=1; {1}当n=2时,f(2)=2; {1+1},{2}当n=3时,f(3)=3; {1+1+1},{1+2},{2+1},{3} 当 n=k时 (k>=4)考虑最后添加的一个数字可能是1、2、3。
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复赛模拟练习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 。
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)从最靠近路边(即第一行)的某棵花生植株跳回路边。
NOIP2014复赛提高组模拟试题

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<=1000100%的数据满足 n<=500000;(running.cpp/c/pas)【问题描述】某校开展了同学们喜闻乐见的阳光长跑活动。
2014NOIP测试题历年试题

NOIP2013一、单项选择题(共15 题,每题1.5 分,共计22.5 分;每题有且仅有一个正确选项)1.一个32 位整型变量占用()个字节。
A. 4B. 8C. 32D. 1282.二进制数11.01 在十进制下是()。
A. 3.25B. 4.125C. 6.25D. 11.1253.下面的故事与()算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‚从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’‛A. 枚举B. 递归C. 贪心D. 分治4.1948 年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A. 冯·诺伊曼(John von Neumann)B. 图灵(Alan Turing)C. 欧拉(Leonhard Euler)D. 克劳德·香农(ClaudeShannon)5.已知一棵二叉树有2013 个节点,则其中至多有()个节点有2 个子节点。
A. 1006B. 1007C. 1023D. 10246.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。
右图是一个有5 个顶点、8 条边的连通图。
若要使它不再是连通图,至少要删去其中的()条边。
A. 2B. 3C. 4D. 57.斐波那契数列的定义如下:F1 = 1, F2 = 1, Fn = Fn –1 + Fn –2 (n ≥3)。
如果用下面的函数计算斐波那契数列的第n 项,则其时间复杂度为()。
int F(int n){if (n <= 2)return 1;elsereturn F(n - 1) + F(n - 2);}A. O(1)B. O(n)C. O(n2)D. O(Fn)8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。
那么,二叉查找树的()是一个有序序列。
NOIP2014普及组复赛解题报告

Prolem 1 珠心算测试(count)这道题其实很简单,意思就是说给你一些数a1,a2,a3,a4...a n,然后让你回答有多少个A+B=C(A ≠ B ≠ C)满足(回答C的数量,而不是等式的数量)方法一那么有一种很明显的做法就是三层循环枚举C、A、B,注意:C是在最外层,若找到了一个A和一个B,满足上述等式,则C是一个符合要求的解,这时ans++,并且退出当前枚举,枚举下一个C,这种算法的时间复杂度是O(N3)而我当时没想到这个算法,因为有更好用而且简单更不容易出错的解法,方法二两重循环,分别枚举i=1...n,j=i+1...n,如果ai+aj这个数在集合中存在,那么you[a i+a j]←true,然后再从a1到a n做一次扫描,只要you[a i],ans++这个算法的好处在于它很好写,不用退出什么的,也不用注意循环的顺序,而且时间复杂度是O(N2)代码(方法2):在此征求一下大神的意见,如有更快的做法,敬请奉上小结:这道题很简单,但很多人没有做对的原因就是没有好好理解题意,但是根本原因其实还在于心态太骄傲了,认为是第一题就可以轻视,这样是不好的,水题我们更要做好啊,你想想同样是100分,这100分多么好拿,所以是水题、越该放平心态,细心地做。
当时我正是由于重视(2013年第一题爆零的教训),用了整整15分钟才做好,最后得了100分Problem 2 比例简化这道题目是说,给定A和B,求解一组A’和B’,满足以下条件:A′B′−AB≥00<A′,B′≤LA′和B′互质首先,想一个总体的框架:我们发现L≤100,因此可以枚举A′和B′,然后判断是否A’B’满足上述条件,并且打擂台求比值最小的一组就行了,打擂台的复杂度是O(1)。
设验证的复杂度为O(k),则总的算法的复杂度为O(kL2),其中L2是104,所以我们只要保证k的大小在100以内就一定没有问题。
现在要求两个分数的差值,该怎么办呢?高精除!很多人一下就想到了,当时我在赛场上就是这么想的,但是又仔细一考虑。
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复赛模拟练习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复赛模拟练习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不是质数。
NOIP2014普及组复赛试题讲解(c++版本)

确定解题思路AC
思路:搜索+DP 枚举出选那些行 算出j列各行之间的分数w[j],k,j两列之间的分数v[k][j]。 f[i][j]表示已经选了i(数量)列,最后一列是j (下标)的最小分数 且第i列是j 状态转移方程:f[i][j]=min(f[i-1][k]+w[j]+v[k][j])。
-6-
第3题 “ 螺旋矩阵”简述
一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动; 如果前方是未曾经过的格子,则继续前进,否则右转;重 复上述操作直至经过矩阵中所有格子。根据经过顺序,在 格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。 下图是一个n = 4 时的螺旋矩阵。
- 14 -
暴力搜索程序模块
int main() { cin>>n>>m>>row>>col; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; w(1); cout<<ans; return 0; }
- 18 -
试题分析
BYE
温馨提示:
本题解内的程序都已经AC,由
于代码较长,可以查看CPP文件
The END
2017. 07. 28
试题分析
NOIP2014 普及组复赛题解
NOIP2014普及组C++
2017. 07. 28
第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年,智能机器人在各行各业中的应用已经十分普遍了,毕竟它做事时的精度与力量比一个普通人是强多了。
王涛的运输队里就有一个,是用来装卸货物的。
noip2014模拟赛

NOIP2014模拟赛提高组By Aponoia注意:最终测试时,所有编译命令均不打开任何优化开关。
数竞神器【问题描述】作为数学竞赛的一员,Aponoia一直在研究一种能够造福所有数竞人的神器。
这种神器最终将能全自动地解决所有数学问题。
历经数年的潜心钻研之后Aponoia终于研发出了这种神器的一个试用版本。
和众多的软件类似,在正式发布这款神器之前,必须先要经过多轮的内测。
因此,Aponoia首先找到了数竞的老师来试验这一神器。
由于现在数竞正在学习数论,于是老师随口编了一个问题:“给定一个正整数n,以及一个质数p,求n、2n、3n、……、(n-1)*n、n*n关于模p的逆元”。
这时,Aponoia却尴尬的发现他开发的神器居然崩溃了。
无奈之下,Aponoia只能找到信息竞赛大神——你,来帮助他完善神器。
【输入格式】第一行两个正整数n,p,含义见题面。
【输出格式】一共n行,每行一个整数。
第i行的整数表示i*n关于模p的逆元。
【样例输入】5 7【样例输出】35162【数据规模和约定】对于30%的数据,2 ≤ n < p ≤ 3000。
对于60%的数据,2 ≤ n < p ≤ 100000。
对于100%的数据,2 ≤ n < p ≤ 3000000。
数据保证p为质数。
粉刷匠【问题描述】在你的帮助之下,Aponoia很快就完成了神器的开发。
这款神器在面市之后受到了各方好评,Aponoia也借此发了一笔大财。
在得到这笔钱后,Aponoia决定建造一栋别墅来犒劳一下自己。
可是在别墅建造过程中,Aponoia却对派来的粉刷匠很不满意。
在Aponoia看来,派来的粉刷匠简直连涂鸦的水平都不如。
于是,Aponoia决定亲自上阵,自己来刷墙。
然而,当Aponoia真正开始刷墙时,他才发现这真不是件轻松的活。
每当Aponoia将一段围墙刷成一种颜色后,他无法直接从整体上欣赏整面墙:比如当前墙上一共有几种颜色的油漆。
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找出某个字母组合的字典序号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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:Impossible
2. 在一棵树上有n只鸟。
由于感受到了自然的力量,它们希望学习自然数。
因此它们站在树上,演唱所有自然数。
自然数是从1开始的,按照递增的顺序演唱。
当演唱到K时,会有K只鸟受不了而飞走。
如果演唱到某个自然数而鸟数不足时,它们会从1开始重新演唱。
假设每秒钟它们都会演唱一个自然数,请你求一求,所有鸟都飞走需要多长时间。
如输入 3 输出2 输入 4 输出3【样例说明】第一秒,一只鸟飞走。
第二秒,两只鸟飞走。
第三秒时,需要三只鸟,但只剩一只鸟,因此它会从1开始演唱,并且飞走。
3. 彩票摇奖(LOTTERY.PAS) 为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。
该彩票的规则是:
(1) 每张彩票上印有7 个各不相同的号码,且这些号码的取指范围为1~33。
(2) 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
(3) 共设置7 个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
特等奖:要求彩票上7 个号码都出现在中奖号码中。
一等奖:要求彩票上有6 个号码出现在中奖号码中。
二等奖:要求彩票上有5 个号码出现在中奖号码中。
三等奖:要求彩票上有4 个号码出现在中奖号码中。
四等奖:要求彩票上有3 个号码出现在中奖号码中。
五等奖:要求彩票上有2 个号码出现在中奖号码中。
六等奖:要求彩票上有1 个号码出现在中奖号码中。
注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。
例如,中奖号码为23 31 1 14 19 17 18,则彩票12 8 9 23 1 16 7 由于其中有两个号码(23 和1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入文件(LOTTERY.IN):输入文件的第一行只有一个自然数N ≤ 1000,表示小明买的彩票张数;第二行存放了7 个介于1 和33 之间的自然数,表示中奖号码;在随后的N 行中每行都有7 个介于 1 和33 之间的自然数,分别表示小明所买的N 张彩票。
输出文件(LOTTERY.OUT):依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
输入输出样例:【输入样例】LOTTERY.IN:2
23 31 1 14 19 17 18 ↙12 8 9 23 1 16 7 ↙11 7 10 21 2 9 31
【输出样例】LOTTERY.OUT :0 0 0 0 0 1 1
4. 贪污排名(Rank.pas\c\cpp):党的十七大热烈召开,胡书记发表了热情洋溢的讲话,其中一个内容是腐败问题,胡书记强调共产党与贪污腐败水火不容,体现了反腐倡廉的决心。
2007年的确是不平凡的一年,尤其在反腐败问题上,确定做了不少工作,抓了N个腐败分子,每抓一个贪官都要求他报出自己的财富,用一个整数表示,胡书记每抓一个都想知道这个贪官在已经抓获的贪官中按照财富排第几名。
党把这个光荣的任务交给了你。
Input :输入文件Rank.in第一行输入一个整数N,表示今年抓获贪官的数量。
接下来N行,每行一个整数,表示按照今年被抓获的顺序给出这N个贪官的财富。
Output :输出文件Rank.out输出N行,第i行表示第i个贪官的财富在1-i 个贪官中排第几位。
Sample Input :6
78
24
68
40
39
89
Sample Output :1
2
2
3
4
1【数据说明】100%的数据N<=45000,财富互不相同且不超过2*10^9(虽然现实中可能不止)30%的数据N<=8000
5. 所谓丑数,就是指那些因子只含2,3,5的数。
1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
为了方便起见,把1也看作是丑数。
请你编写一个程序,输入n,n<3000,寻找并打印第n个丑数。
如输入:11 输出:15
6. 锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同。
小A会用仙术,每用一次可以让他向上跳一层或两层,但是每次跳跃后小A都将用完灵力,必须爬过至少一层才能再次跳跃。
小A想用最短的时间爬到塔顶,可是他不能找到时间最短的方案。
所以请你帮他找到一个时间最短的方案让他爬到塔顶,小A只关心时间,所以你只要告诉他最短时间是多少就可以了。
[输入格式]tower.in 第一行一个整数n (n<=10000),表示塔的层数。
接下来的n行每行一个整数(<=100),表示从下往上爬每层所需的时间。
[输出格式]tower.out 一个数,表示最短时间。
[样例输入]5
3
5
1
8
4
[样例输出] 1
[数据规模]对20%的数据,n<=10 对40%的数据,n<=100 对60%的数据,n<=5000 对100%的数据,n<=10000。