NOIP2014提高组复赛试题day1day2

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

10 5 6

6 2

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

5 1 2 2 3 3 4 4 5

1 5

2

3 10 20 74

【样例说明】

本例输入的图如上所示,距离为2的有序点对有(1,3)、(2,4)、(3,1)、(3,5)、(4,2)、(5,3)。其联合权值分别为2、15、2、20、15、20。其中最大的是20,总和为74。

【数据说明】

对于30%的数据,1<≤100; 对于60%的数据,1<≤2000;

对于100%的数据,1<≤200,000,0

3. 飞扬的小鸟

(bird.cpp/c/pas)

【问题描述】

Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需

要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让

小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到

了水管或者掉在地上的话,便宣告失败。

为了简化问题,我们对游戏规则进行了简化和改编:

1.游戏界面是一个长为n,高为m的二维平面,其中

有k个管道(忽略管道的宽度)。

2.小鸟始终在游戏界面内移动。小鸟从游戏界面最左

边任意整数高度位置出发,到达游戏界面最右边时,

游戏完成。

3.小鸟每个单位时间沿横坐标方向右移的距离为1,竖直移动的距离由玩家控制。如

果点击屏幕,小鸟就会上升一定高度X,每个单位时间可以点击多次,效果叠加;

如果不点击屏幕,小鸟就会下降一定高度Y。小鸟位于横坐标方向不同位置时,上

升的高度X和下降的高度Y可能互不相同。

4.小鸟高度等于0或者小鸟碰到管道时,游戏失败。小鸟高度为m时,无法

再上升。

现在,请你判断是否可以完成游戏。如果可以,输出最少点击屏幕数;否则,输出小鸟最多可以通过多少个管道缝隙。

【输入】

输入文件名为 bird.in。

第1行有3个整数n,m,k,分别表示游戏界面的长度,高度和水管的数量,每两个整数之间用一个空格隔开;

接下来的n行,每行2个用一个空格隔开的整数X和Y,依次表示在横坐标位置0~n-1上玩家点击屏幕后,小鸟在下一位置上升的高度X,以及在这个位置上玩家不点击屏幕时,小鸟在下一位置下降的高度Y。

接下来k行,每行3个整数P,L,H,每两个整数之间用一个空格隔开。每行表示一个管道,其中P表示管道的横坐标,L表示此管道缝隙的下边沿高度为L,H表示管道缝隙上边沿的高度(输入数据保证P各不相同,但不保证按照大小顺序给出)。

【输出】

输出文件名为bird.out。

共两行。

第一行,包含一个整数,如果可以成功完成游戏,则输出1,否则输出0。

第二行,包含一个整数,如果第一行为1,则输出成功完成游戏需要最少点击屏幕数,否则,输出小鸟最多可以通过多少个管道缝隙。

【输入输出样例1】

bird.in bird.out

10 10 6 3 9

9 9

1 2

1 3

1 2

1 1

2 1

2 1

1 6

2 2

1 2 7

5 1 5

6 3 5

7 5 8

8 7 9

9 1 3 1 6

【输入输出样例2】

bird.in bird.out

10 10 4 1 2

3 1

2 2

1 8

1 8

3 2

2 1

2 1

2 2

1 2

1 0

2 6 7 9 9 1 4

3 8 10 0 3

【输入输出样例说明】

如下图所示,蓝色直线表示小鸟的飞行轨迹,红色直线表示管道。

【数据范围】

对于30%的数据:5≤n≤10,5≤m≤10,k=0,保证存在一组最优解使得同一单位时间最多点击屏幕3次;

对于50%的数据:5≤n≤20,5≤m≤10,保证存在一组最优解使得同一单位时间最多点击屏幕3次;

对于70%的数据:5≤n≤1000,5≤m≤100;

对于100%的数据:5≤n≤10000,5≤m≤1000,0≤k

CCF全国信息学奥林匹克联赛(NOIP2014)复赛

提高组 day2

1.无线网络发射器选址

(wireless.cpp/c/pas)

【问题描述】

随着智能手机的日益普及,人们对无线网的需求日益增大。某城市决定对城市内的公共场所覆盖无线网。

假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值1。东西向街道从北到南依次编号为0,1,2…128,南北向街道从西到东依次编号为0,1,2…128。

东西向街道和南北向街道相交形成路口,规定编号为x的南北向街道和编号为y的东西向街道形成的路口的坐标是(x, y)。在某些路口存在一定数量的公共场所。

由于政府财政问题,只能安装一个大型无线网络发射器。该无线网络发射器的传播范围是一个以该点为中心,边长为2*d的正方形。传播范围包括正方形边界。

例如下图是一个d = 1的无线网络发射器的覆盖范围示意图。

现在政府有关部门准备安装一个传播参数为d的无线网络发射器,希望你帮助他们在城市内找出合适的安装地点,使得覆盖的公共场所最多。

【输入】

输入文件名为wireless.in。

第一行包含一个整数d,表示无线网络发射器的传播距离。

第二行包含一个整数n,表示有公共场所的路口数目。

接下来n行,每行给出三个整数x, y, k, 中间用一个空格隔开,分别代表路口的坐标(x, y)以及该路口公共场所的数量。同一坐标只会给出一次。

【输出】

输出文件名为wireless.out。

输出一行,包含两个整数,用一个空格隔开,分别表示能覆盖最多公共场所的安装地点方案数,以及能覆盖的最多公共场所的数量。

【输入输出样例】

wireless.in wireless.out

1

1 30

2

4 4 10

6 6 20

【数据说明】

对于100%的数据,1 ≤ d ≤ 20,1 ≤ n ≤ 20, 0 ≤ x ≤ 128, 0 ≤ y ≤ 128, 0 < k ≤ 1,000,000。

2.寻找道路

(road.cpp/c/pas)

【问题描述】

在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:

1.路径上的所有点的出边所指向的点都直接或间接与终点连通。 2.在满足条件1的情况下使路径最短。

注意:图G 中可能存在重边和自环,题目保证终点没有出边。 请你输出符合条件的路径的长度。

【输入】

输入文件名为road.in 。

第一行有两个用一个空格隔开的整数n 和m ,表示图有n 个点和m 条边。 接下来的m 行每行2个整数x 、y ,之间用一个空格隔开,表示有一条边从点x 指向点y 。 最后一行有两个用一个空格隔开的整数s 、t ,表示起点为s ,终点为t 。

【输出】

输出文件名为road.out 。

输出只有一行,包含一个整数,表示满足题目描述的最短路径的长度。如果这样的路径不存在,输出-1。

【输入输出样例1】

road.in

road.out

3 2 1 2 2 1 1 3

-1

【输入输出样例说明】

如上图所示,箭头表示有向道路,圆点表示城市。起点1与终点3不连通,所以满足题目描述的路径不存在,故输出-1。

【输入输出样例2】

road.in

road.out

6 6 1 2 1 3

2 6 2 5 4 5

3

4 1 5

3

【输入输出样例说明】

如上图所示,满足条件的路径为1->3->4->5。注意点2不能在答案路径中,因为点2连了一条边到点6,而点6不与终点5连通。

【数据说明】

对于30%的数据,0< n ≤10,0< m ≤20; 对于60%的数据,0< n ≤100,0< m ≤2000;

对于100%的数据,0< n ≤10,000,0< m ≤200,000,0< x,y,s,t ≤n ,x ≠t 。

3.解方程 (equation.cpp/c/pas)

【问题描述】

已知多项式方程:

求这个方程在[1, m]内的整数解(n和m均为正整数)。

【输入】

输入文件名为equation.in。

输入共n+2行。

第一行包含2个整数n、m,每两个整数之间用一个空格隔开。

接下来的n+1行每行包含一个整数,依次为a0,a1,a2,……,an。

【输出】

输出文件名为equation.out。

第一行输出方程在[1, m]内的整数解的个数。

接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m]内的一个整数解。

【输入输出样例1】

equation.in equation.out

2 10 1

-2 1 1 1

【输入输出样例2】

equation.in equation.out

2 10 2 -

3 1 2 1 2

【输入输出样例3】

equation.in equation.out 2 10

1

3

2

【数据说明】

对于30%的数据,0

对于50%的数据,0

对于70%的数据,0

对于100%的数据,0

2014noip复赛模拟练习11(答案)

新学年就要开始了,爸爸把N元钱给了小青,让他购买一批文具,并作了以下要求:只能买圆珠笔、铅笔和铅笔芯,并且每样至少买一支,总数要超过30支,而且钱要全部花完。当小青去到文具店时,发现圆珠笔8角钱一支、铅笔2角钱一支、铅笔芯1角钱一支。小青怎么买才能符合爸爸的要求呢?请你编个程序帮他算出符合购买要求的所有方案总数。 Input 一个整数N,表示购买文具一共的元数。(1 <= N <= 50) Output 一个整数,即符合购买要求的所有方案总数。 Sample Input 8 Sample Output 135 Source program ex1294; var n,i,j,k,sum:integer; begin readln(n); n:=n*10; sum:=0; for i:=1 to n div 8 do for j:=1 to n div 2 do begin k:=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 + 1 1 + 1 + 2 1 + 2 + 1 2 + 1 + 1 2 + 2 1 + 3 3 + 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。 所以很容易推出递推公式 f(k)=f(k-1)+f(k-2)+f(k-3). var f:array[1..20] of longint; i,n:longint; procedure init; begin assign(input,'divide.in'); assign(output,'divide.out'); reset(input); rewrite(output); end; procedure endit; begin close(input); close(output); end; begin init; readln(n); f[1]:=1; f[2]:=2;

2014noip复赛模拟练习12(答案)

心系南方灾区 【问题描述】 现在我国南方正在承受百年不遇的大雪、冻雨灾害。北京市已经开始了面向全体市民的捐款捐物活动,并组织运力,以最快速度将这些救灾物资运送到灾区人民的手中。 已知救灾物资中有m件大衣(10000<=m<=2000000 ),一辆卡车一次最多可以运走n件大衣(2000<=n<=10000 )。请你编写程序计算一下,要将所有的大衣运走,北京市政府最少需要调动多少辆卡车参与运送。 【输入文件】 文件名:HELP.IN 文件中只有两个整数m、n 。 【输出文件】 文件名:HELP.OUT 文件中只有一个整数,表示需要的卡车数量。 【样例输入】 10000 2000 【样例输出】 5 Delphi语言: Codee#10155 program help; var a,b:longint; begin

assign(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 Copy 6 36 Sample Output Copy 6 HINT 对于100%的数据,1<=a<=b<=10^9。 解法: 设原数为x,y

NOIP提高组初赛历年试题及答案阅读题篇

NOIP提高组初赛历年试题及答案阅读题篇 阅读程序写结果(共4 题,每题8 分,共计32 分) 阅读程序的最好方法并非是依次从头到尾。程序不像迷语,我们无法从末尾几页找到答案,也不像一本引人入胜的书籍,只需直接翻到褶皱最多的那几页,我们就能找到最精彩的片断。因此我们在阅读程序时,最好逐一考察研究每一段代码,搞清楚每一段代码的来龙去脉,理解每一段代码在程序中所起的作用,进而形成一个虚拟的程序结构,并以此为基础来进行阅读。 1、分层读:高层入手,逐层深入,正确理解程序。 2、写注解:固化、总结、提炼已有的理解成果。 3、先模拟:根据代码顺序跟踪变量,模拟运算。 4、找规律:先模拟几次循环后,找出背后的规律。 5、看功能:从代码结构和运算结果判断程序功能。 6、猜算法:有时不知道算法,通过结构和函数猜一猜。 7、换方法:了解程序本质后,换一个熟悉的方法试试。 对大多数人来说,写程序是令人开心的一件事情,读别人的程序却很痛苦,很恐惧,宁愿自己重写一遍。其实读到好的程序,就像读一篇美文,令人心旷神怡,豁然开朗,因为这背后是一个人的思维,甚至整个人生。 阅读别人的程序不仅可以巩固自己的知识,启发自己的思维,提升自己的修养,让你收获满满,其实,这也是在学习、在竞赛、在工作中的最重要、最常用的基本功。 如果说写程序是把自己的思维转化为代码,读程序就是把代码转化为你理解的别人的思维。当你阅读程序时有强烈的代入感,像演员一样,真正进入到编剧的精神世界,面部表情也随之日渐丰富起来。祝贺你!你通关了! 总之,看得多,码得多,拼得多,你就考得多…… NOIP2011-1. #include #include using namespace std;

2014noip普及组复赛测试(答案)

老师给笑笑布置了一份作业,笑笑不知如何解决。老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。 【输入文件】: 第一行包含一个整数n,表示数列的长度。(n<=100000) 第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。 【文件输出】: 文件中只有一个整数,为最大的连续段总和。 【输入样例】: 5 1 - 2 3 1 -4 【输出样例】 4 var s:array[1..10000] of longint; n,ii,t,ans:longint; begin readln(n); for i:=1 to n do read(s[i]); t:=s[1];ans:=s[1]; for i:=2 to n do begin if t<0 then t:=s[i] else t:=t+s[i]; if t>ans then ans:=t; end; writeln(ans); end. 输入6 1 5 4 - 2 6 3 输出17 输入10 24 -12 9 11 7 20 -8 15 3 18 输出87 输入7 10 8 9 -5 12 6 11 输出51 输入20 5 12 19 20 -7 - 6 18 22 19 8 11 33 15 32 1 7 -30 4 14 24 -13输出230 【问题描述】 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”

第十九届全国青少年信息学奥林匹克联赛初赛提高组(C++)精编版

2013第十九届全国青少年信息学奥林匹克联赛初赛 提高组C++语言试题竞赛时间:2013年10月13日14:30~16:30 选手注意:试题纸共有12页,答题纸共有2页,满分100分。请在答题纸上作 答,写在试题纸上的一律无效。 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正 确选项) 1.一个32位整型变量占用()个字节。 A.4 B.8 C.32 D.128 2.二进制数11.01在十进制下是()。 A. 3.25 B. 4.125 C.6.25 D.11.125 3.下面的故事与()算法有着异曲同工之妙。 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山, 山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙, 庙里有个老和尚给小和尚讲故事....’? A.枚举 B.递归 C.贪心 D.分治 4.1948年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。 A.冯·诺伊曼(John von Neumann) B.图灵(Alan Turing) C.欧拉(Leonhard Euler) D.克劳德·香农(Claude Shannon) 5.已知一棵二叉树有2013个节点,则其中至多有()个节点有2个子节点。 A.1006 B.1007 C.1023 D.1024 6.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连 通图。右图是一个有5个顶点、8条边的连通图。若要使它不再是连 通图,至少要删去其中的()条边。 A.2 B.3 C.4 D.5 7.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn–1+Fn–2(n≥3)。如果用下面的 函数计算斐波那契数列的第n项,则其时间复杂度为()。 int F(int n) { if(n<=2) return 1; else

2014noip复赛模拟练习4(答案)

编程输入若干个字符串(以“?”号结束),找出并输出未在此串中出现的所有字母和数字(按ascii码顺序列出,区分大小写)。 输入:一行,一串字符,小于1000 000个。 输出:一行,未在字符串中出现的所有的字母和数字,按ascii码顺序、 var p,q:set of char; ch,i:char; begin assign(input,'agger.in'); reset(input); assign(output,'agger.out'); rewrite(output); p:=['0'..'9','A'..'Z','a'..'z']; q:=[]; read(ch); while ch<>'?' do begin q:=q+[ch]; read(ch); end; for i:='0' to '9' do if not(i in q) and (i in p) then write(i); for i:='A' to 'Z' do if not(i in q) and (i in p) then write(i); for i:='a' to 'z' do if not(i in q) and (i in p) then write(i); close(input); close(output); end. 或 var p:set of char; ch,i:char; begin assign(input,'agger.in'); reset(input); assign(output,'agger.out'); rewrite(output); p:=['0'..'9','A'..'Z','a'..'z']; read(ch); while ch<>'?' do

NOIP2014提高组复赛试题day1day2

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 10 5 6 6 2 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个整数表示

2014noip复赛模拟练习7(答案)

【问题描述】 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。 【输入文件】 输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。 【输出文件】 输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。 【样例输入】 5 6 4 2 4 5 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是最少划分的段数。 var n,m,t,i,a,ans:longint; begin assign(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 begin read(a); if t+a>m then begin inc(ans); t:=a; end else inc(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。即某合数的各位数字之和等于它所有质因数的各数字之和。求1-N之间具有上述特点的所有合数。如输入N=100则输出 4 22 27 58 85 94 var n,t1,t2,tatol: integer; yes: boolean; procedure sub1(x:integer; var t:integer); {过程:分离x 的各位数字 } begin {并求各位数字之和 } repeat t:=t+x mod 10; x:=x div 10; until x=0 end; procedure sub2(x: integer; var t: integer); {过程:分解质因数 } var xx,tt:integer; begin

2014noip复赛模拟练习17

1.神舟号飞船在完成宇宙探险任务回到地球后,宇航员张三感觉身体不太舒服,去了医院检查,医生诊断结果:张三体内基因已被改变,原有人体基因序列中已经被渗入外星球不明异形生物基因,但可喜的是,这些异形基因都有一个共同的特征,就是该基因序号的平方除以7的余数都是1,要赶快清除掉,否则会危害整个人类。赶快行动吧。 【输入描述】第一行是一个整数n(基因个数)第二行是n个整数(张三的基因序列)【输出描述】去除异形基因后的正常序列,空格隔开 【输入样例】4↙6 2 8 12【输出样例】 2 12 2.羊村好久没有举行大型活动了,于是喜羊羊提议举办一次运动会。为了和国际接轨,决定给运动会取个响亮的名字(冠名)。那么起个什么名字呢?有人提议,既然这次活动是喜羊羊发起的,那就叫“喜羊羊运动会”吧。随之有很多羊附和表示同意,但也有一部分羊提出反对意见,认为喜羊羊虽然聪明,但资历太浅,不够格。正当大家吵得不可开交时,慢羊羊村长大声喊道:“停——,打住,既然大家意见不统一,那么我们来投票吧。如果支持喜羊羊的票数达到或超过总票数的一半,那就叫喜羊羊运动会”。村长的意见得到了大家的一致赞同(姜还是老的辣,关键时刻还得慢羊羊村长才镇得住)。可是参加投票的村民太多了,统计投票结果是一件费时且费力的事情,于是慢羊羊村长找到了你,请你设计一个程序统计同意以“喜羊羊”为名的票数,达到要求则输出“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:Other 3.放暑假了,小明想上网下载一些电影看,但是缓慢的网速令他无法忍受。他了解到了接下来的N个小时中的网速情况,想找一段连续的M个小时来下载电影,并且希望这M个小时的平均网速尽可能的大,你能编一个程序帮助他实现愿望吗? 输入:第一行包含两个整数N、M,1<=M<=N<=1000000; 第二行包含N个整数,表示第N个小时的网速。相邻两数之间用空格隔开。Output:输出文件仅有一行包含一个实数,表示最大的平均网速,保留小数点后两位。 Sample Input :6 3↙3 6 1 5 6 4 Sample Output :5.00 输入数据保证重复次数最大的情况只有一个。 4. 著名的四色定理你一定听说过吧?这可是近代世界三大数学难题之一唷(顺便提上一句,另外两个是费马定理和哥德马赫猜想)。四色定理的提出来自英国。1852年,毕业于伦敦大学的弗南西斯·格思里(Francis Guthrie)在一家科研单位搞地图着色工作时,发现了一种有趣的现象:“看来,每幅地图都可以用四种颜色着色,使得有共同边界的国家着上不同的颜色。”(注意:只要求有公共边的区域不同色就可以,只有公共顶点的同色也没关系) 这个结论能不能从数学上加以严格证明呢?他和在大学读书的弟弟格 里斯决心试一试。兄弟二人为证明这一问题而使用的稿纸已经堆了一大叠,

NOIP2014普及组复赛试题 螺旋矩阵

NOIP2014普及组复赛试题解答 3. 螺旋矩阵 【问题描述】 一个n 行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1,2,3,…,n2,便构成了一个螺旋矩阵。 现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。 【分析】 这是个蛇形填数问题。如果采用先枚举二维数组再找对应的元素方法,由于1 ≤n ≤30,000,需要建立一个 30,000× 30,000的二维数组,结果会发生数据溢出且超出运行内存上限(128M)。 我们可以采用类似贪吃蛇的方法,让它在N×N个方格内自外向内逐格移动,控制其向右转的方向,并计算其长度。 解法一 #include using namespace std; bool pd(int,int) ; int i,j; bool p; int main() { int n,x,y,u,d,l,r,tot=0; // U为上边界,D为下边界,L为左边界,R为右边界; freopen("matrix.in","r",stdin); freopen("matrix.out","w",stdout); scanf("%d%d%d",&n,&i,&j); d=n;r=n;u=1;l=1; //各边界赋初值; x=1;y=0; p=true; while((totl)&&p){--y;++tot;pd(x,y);}++l;//在下侧边界上向左移动,当下侧一行的结束时,控制其左边界向右缩一列; while((x>u+1)&&p){--x;++tot;pd(x,y);}++u;//在左侧边界上向上移动,当左侧一列的结束时,控制其上边界向下缩一行; } printf("%d\n",tot);

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 Input 14 3 H J H H H J

2014noip复赛模拟练习21(附答案)

趣味填空 Description 小华的寒假作业上,有这样一个趣味填空题: 给出用等号连接的两个整数,如“1234=127”。当然,现在这个等号是不成立的。题目让你在左边的整数中间某个位置插入一个加号,看有没有可能让等号成立。以上面的式子为例,如果写成123+4=127,这就可以了。 请你编写一个程序来解决它。 Input 只有那个不相等的式子。已知,等号两边的整数都不会超过2000000000。 Output 如果存在这样的方案,请输出那个正确的式子。如果不存在解决方案,请输出“Impossible!”(引号中的部分)。 Sample Input 1234=127 Sample Output 123+4=127 program 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 begin st2:=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位后的新单词。你能编程帮助贝贝最快完成任务吗? Input 共有2*M+1行,第1行为M,第2行开始为具体数据,每一组数据有2行,第1行为字串L,第2行为N。 Output 共M行,每行为旋转后的字串。 Sampl Input 3 computer 3 program 1 ABCDEFGH 35 Sample Output tercompu mprogra program ex1842; var st,st1,st2:string;

【精选资料】NOIP提高组复赛试题与简解转载

Day1 铺地毯 【问题描述】 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n 张地毯,编号从1 到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。【输入】 输入文件名为 carpet.in。 输入共 n+2 行。 第一行,一个整数 n,表示总共有n 张地毯。 接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。 第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。 【输出】 输出文件名为 carpet.out。 输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。 【输入输出样例 1】 【输入输出样例说明】 如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。

【输入输出样例 2】 【输入输出样例说明】 如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。 【数据范围】 对于 30%的数据,有n≤2; 对于 50%的数据,0≤a, b, g, k≤100; 对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。 【一句话题意】 给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。 【考察知识点】 枚举 【思路】 好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。

noip提高组复赛知识点

Noip提高组复赛知识点 1. 简介 NOIP(National Olympiad in Informatics in Provinces)是中国计算机学会主办 的全国性计算机竞赛。它分为初赛和复赛两个阶段,复赛则进一步分为提高组和普及组。本文将重点介绍NOIP提高组复赛的知识点。 2. 复赛知识点 2.1 数据结构 在NOIP提高组复赛中,对数据结构的理解和应用是非常重要的。以下是一些 常见的数据结构及其应用: 2.1.1 数组 数组是一种线性数据结构,可以在O(1)的时间复杂度内访问任意位置的元素。在复赛中,经常需要使用数组来解决一些简单的问题,如统计字符出现次数、记录中间结果等。 2.1.2 链表 链表是一种动态数据结构,它通过指针将多个节点连接起来。在复赛中,链表 常常用于实现一些特定的数据结构,如队列、栈等。 2.1.3 栈和队列 栈和队列是两种基本的数据结构。栈是一种后进先出(LIFO)的数据结构,而 队列是一种先进先出(FIFO)的数据结构。它们在复赛中的应用非常广泛,如深 度优先搜索(DFS)和广度优先搜索(BFS)等算法中常常使用栈和队列来辅助实现。 2.1.4 树和图 树和图是两种重要的非线性数据结构。树是一种层次结构,图是一种由节点和 边组成的网络结构。在复赛中,树和图常常用于解决一些复杂的问题,如最短路径、最小生成树等。 2.2 算法和技巧 在NOIP提高组复赛中,算法和技巧的掌握是至关重要的。以下是一些常见的 算法和技巧:

2.2.1 动态规划 动态规划是一种将复杂问题分解成简单子问题的方法,通过保存子问题的解来 避免重复计算。在复赛中,动态规划常常用于解决一些涉及最优化问题的算法。 2.2.2 贪心算法 贪心算法是一种每一步都选择当前最优解的算法。在复赛中,贪心算法常常用 于解决一些涉及最优解问题的算法,如最小生成树问题、最短路径问题等。 2.2.3 搜索算法 搜索算法是一种通过遍历问题的所有可能解空间来寻找解的方法。在复赛中, 搜索算法常常用于解决一些复杂的问题,如深度优先搜索(DFS)、广度优先搜索(BFS)等。 2.2.4 排序算法 排序算法是一种将一组数据按照某种特定顺序排列的算法。在复赛中,排序算 法常常用于解决一些需要对数据进行排序的问题,如查找中位数、查找第K大元 素等。 2.3 编程语言和工具 在NOIP提高组复赛中,掌握一种编程语言和一些常用的工具是必要的。以下 是一些常见的编程语言和工具: 2.3.1 C/C++ C/C++是NOIP竞赛中最常用的编程语言之一,它具有高效性和灵活性。掌握 C/C++语言的语法和常用库函数对于参加复赛非常重要。 2.3.2 Python Python是一种简单易学的编程语言,它具有丰富的第三方库和强大的数据处 理能力。在复赛中,Python常常用于解决一些需要大量数据处理的问题。 2.3.3 编译器和IDE 在NOIP提高组复赛中,选择一个合适的编译器和集成开发环境(IDE)对于 编写和调试程序非常重要。常用的编译器和IDE有GCC、Clang、Visual Studio等。 3. 总结 NOIP提高组复赛涵盖了广泛的知识点,包括数据结构、算法和编程语言等。 在备战复赛时,需要系统地学习和掌握这些知识点,并通过大量的实践来提高编程能力。希望本文对复赛的准备有所帮助。

最新noip提高组试题(day1+day2) word版

精品资料 n o i p提高组试题(d a y1+d a y2)w o r d 版 ........................................

CCF 全国信息学奥林匹克联赛(NOIP2017)复赛 提高组 day1 (请选手务必仔细阅读本页内容) 一.题目概况 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。

3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz, 内存 4G,上述时限以此配置为准。 4、只提供 Linux 格式附加样例文件。 5、提交的程序代码文件的放置位置请参照各省的具体要求。 6、特别提醒:评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以其为准。

【问题描述】 1.小凯的疑惑(math.cpp/c/pas) 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。 【输入格式】 输入文件名为math.in。 输入数据仅一行,包含两个正整数a 和b,它们之间用一个空格隔开,表示小凯手中金币的面值。 【输出格式】 输出文件名为math.out。 输出文件仅一行,一个正整数N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。 【输入输出样例1】 math/math1.in math/math1.ans 【输入输出样例1 说明】 小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、2、4、5、8、11 的物品,其中最贵的物品价值为11,比11 贵的物品都能买到,比如: 12 = 3 * 4 + 7 * 0 13 = 3 * 2 + 7 * 1 14 = 3 * 0 + 7 * 2 15 = 3 * 5 + 7 * 0 …… 【输入输出样例2】 见选手目录下的math/math2.in 和math/math2.ans。 【数据规模与约定】 对于30%的数据: 1 ≤ a,b ≤ 50。 对于60%的数据: 1 ≤ a,b ≤ 10,000。 对于100%的数据:1 ≤ a,b ≤ 1,000,000,000。

第22届全国青少年信息学奥林匹克联赛noip提高组试题day1

资料收集于网络如有侵权请联系网站删除谢谢 第22届全国青少年信息学奥林匹克联赛 CCF-NOIP-2016 提高组(复赛)第一试 竞赛时间:2016年11月19日8:30〜12:00 1.文件名(程序名和输入输出文件名)必须使用英文小写。 2.除非特殊说明,结果比较方式均为忽略行末空格及文末回车的全文比较。 3.C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 4.全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) Ⅱ X2 240 processor 2.8GHz,内存4G,上述时限以此配置为准。 5.只提供Linux格式附加样例文件。 6.评测在NOI Linux下进行。 7.编译时不打开任何优化选项。

玩具谜题(toy) 【问题描述】 小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩具小人的左数第2个玩具小人那里。” 小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。 小南一边艰难地辨认着玩具小人,一边数着: “singer”朝内,左数第3个是archer。 “archer”朝外,右数第1个是thinker。 “thinker”朝外,左数第2个是writer。 “所以眼镜藏在writer这里!” 虽然成功找回了眼镜,但小南并没有放心。如果下次有更多的玩具小人藏他的眼镜,或是谜题的长度更长,他可能就无法找到眼镜了。所以小南希望你写程序帮他解决类似的谜题。这样的谜题具体可以描述为: 有n个玩具小人围成一圈,已知它们的职业和朝向。现在第1个玩具小人告诉小南一个包含m条指令的谜题,其中第i条指令形如“左数/右数第s i个玩具小人”。你需要输出依次数完这些指令后,到达的玩具小人的职业。 【输入格式】 从文件toy.in中读入数据。 输入的第一行包含两个正整数n,m,表示玩具小人的个数和指令的条数。 接下来n行,每行包含一个整数和一个字符串,以逆时针为顺序给出每个玩具小人的朝向和职业。其中0表示朝向圈内,1表示朝向圈外。保证不会出现其他的数。字符串长度不超过10且仅由小写字母构成,字符串不为空,并且字符串两两不同。整数和字符串之间用一个空格隔开。

NOIP历年复赛提高组试题(2004-2021)

NOIP历年复赛提高组试题(2004-2021)

第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题 (提高组竞赛用时:3小时) 1、津津的储蓄计划(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】 290 230

noip2014普及组复赛题解

1.珠心算测验 注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同 的)数之和。这样的题意加上100的规模,建议暴力3个for: #include #include #include #include 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 #include #include 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){

相关文档
最新文档