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

合集下载

NOIP2014普级组复赛试题

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、文件名(程序名和输入输出文件名)必须使用英文小写。

NOIP2014复赛提高组标准答案

NOIP2014复赛提高组标准答案
第二十届全国青少年信息学奥林匹克联赛初赛 提高组参考答案
一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分) 1 2 3 4 B 9 D D 10 A D 11 D B 12 C
5 C 13 C
6 C 14 B
7 B 15 C
8 B
二、不定项选择题(共 5 题,每题 1.5 分,共计 7.5 分;每题有一个或多个正确选项,没有部分分) 1 AB 2 BCD 3 ABCDE 4 AC 5 BD
三、问题求解(共 2 题,每题 5 分,共计 10 分;每题全部答对得 5 分,没有部分分) 1. 2. 102 15
四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分) 1. 2. 8 20
3. 4.ຫໍສະໝຸດ 2 5 6 3 4 7 1 3 6 9 1 5 10 4 11 8 2 7
五、完善程序(共计 28 分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及 上机验证,可以不上报 CCF NOI 科学委员会复核) Pascal 语言 1. (1) (2) (3) (4) (5) 2. (1) (2) (3) (4) [1,1] rowsum[i,0]:=0 rowsum[i,j-1]+matrix[i][j] area:=0 stack2[top2]:=stack1[top1] stack1[top1]:=stack2[top2] top1-1 [1][1] rowsum[i][0]=0 rowsum[i][j-1]+matrix[i][j] area=0 rowsum[i][last]-rowsum[i,first-1] 2 3 3 3 3 n 0 stack2[top2]=stack1[top1] stack1[top1]=stack2[top2] C++语言 C 语言 分值 2.5 2.5 3 3 3

NOIP2014提高组复赛试题day1day2

NOIP2014提高组复赛试题day1day2

CCF全国信息学奥林匹克联赛(NOIP2014复赛提高组dayl1.生活大爆炸版石头剪刀布(rps.cpp/c/pas)【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。

如果两个人出拳样,则不分胜负。

在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。

升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。

蜥蜴人:《星际迷航》中的反面角色。

这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。

现在,小A和小B尝试玩这种升级版的猜拳游戏。

已知他们的出拳都是有周期性规律的,但周期长度不一定相等。

例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”已知小A和小B一共进行N次猜拳。

每一次赢的人得1分,输的得0分;平局两人都得0分。

现请你统计N次猜拳结束之后两人的得分。

【输入】输入文件名为rps.in。

第一行包含三个整数:N,NANB分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。

数与数之间以一个空格分隔。

第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。

其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”,4表示“斯波克”。

数与数之间以一个空格分隔。

【输出】输出文件名为rps.out。

输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。

【数据说明】对于100%勺数据,0<N<200,0<NA&200,0<NB&200。

2.联合权值(link.cpp/c/pas)【问题描述】无向连通图G有n个点,n-1条边。

noip2014普及组复赛题解

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个点。

NOIP历年复赛提高组试题(2006-2014)

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人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。

NOIP2014 题解

NOIP2014 题解

NOIP2014 题解D1T1 : 生活大爆炸版石头剪刀布(rps)100% : 模拟。

另一种方法,可以先求出na,nb 的最小公倍数l ,在[1,l]的区间里模拟,对于剩下的部分,显然是循环了若干次[1,l]内的胜负情况,并剩余了一小部分,于是只要把两人的分数各自乘n div l,再对剩下的部分模拟即可。

复杂度 : O(na*nb)D1T2 : 联合权值(linp)30% : 穷举三个点,判断是否相邻,再统计权值并更新答案。

复杂度 : O(n^3)60% : 穷举一个点,并以该点为起点搜索,查找距离为2的结点,统计后更新答案。

复杂度 : O(n^2)100% : 记][i fa 为结点i 的父亲, ][i pow 是i 的权值。

题目给出了n 个点,n-1条边,那么这是一棵树。

那么考虑树形dp 。

很显然,距离为2的点在一棵树中有且仅有两种不同的位置,第一种是结点i 与结点]][[i fa fa ,第二种则是结点i 与结点j ,其中][][j fa i fa =。

记∑=][][j pow i sum,]}[{]max[j pow Max i =,其中][j fa i =。

那么有∑∑-+=])[]][[(*][]][[*][*2_j pow j fa sum j pow i fa pow i sum sum ans ,]}[*][]],[[*]{max[max _i y i x i fa pow i Max ans =,其中][],[i y i x 是i 的子节点中权值最大的两个。

复杂度 : O(n)D1T3 : 飞扬的小鸟(bird)30% : 搜索。

70% : 考虑动态规划,记],[j i f 为达到坐标),(j i 至少要点击几次屏幕。

则有]])1[,1[,]]1[*,1[(],[-+-+---=i y j i f k i x k j i f Min j i f ,注意考虑边界情况。

复杂度 : O(nm^2)100% : 上述动态规划超时的原因在于转移复杂度太高,如果能将转移复杂度降为O(1),那么就可以轻松将此题AC ,仔细想想发现对于所有可以用于更新],[j i f 的状态的高度都与j 同余(mod x[i-1]),那么在实际实现上述动态规划时,我们可以先穷举同余系,并以高度从低到高进行动态规划,在同一同余系中,记一个变量temp 为已经访问的状态中可以用于更新的最小值,每穷举到一个新的状态,把temp 更新为]),1[,1(j i f temp Min -+,并且只用temp+1更新其他状态。

NOIP2014提高组复赛试题

NOIP2014提高组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2014)复赛提高组day1(请选手务必仔细阅读本页内容)一.题目概况中文题目名称生活大爆炸版石头剪刀布联合权值飞扬的小鸟英文题目与子目录名rps link bird 可执行文件名rps link bird输入文件名rps.in link.in bird.in输出文件名rps.out link.out bird.out每个测试点时限1秒1秒1秒测试点数目101020每个测试点分值10105附加样例文件有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统运行内存上限128M128M128M二.交源程序文件名对于C++语言rps.cpp link.cpp bird.cpp对于C语言rps.c link.c bird.c 对于pascal语言rps.pas link.pas bird.pas三.编译命令(不包含任何优化开关)对于C++语言g++-o rps rps.cpp g++-o link link.cpp g++-o bird bird.cpp–lm–lm–lm对于C语言gcc-o rps rps.c–lm gcc-o link link.c–lm gcc-o bird bird.c–lm对于pascal fpc rps.pas fpc link.pas fpc bird.pas 语言注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm)64x2Dual Core CPU5200+,2.71GHz,内存2G,上述时限以此配置为准。

4、只供Linux格式附加样例文件。

5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1.生活大爆炸版石头剪刀布(rps.cpp/c/pas)【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。

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

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复赛提高组模拟试题

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测试题历年试题

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普及组复赛解题报告

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复赛模拟练习4(答案)

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个苹果。

NOIP2014普及组复赛试题讲解(c++版本)

NOIP2014普及组复赛试题讲解(c++版本)
- 15 -
确定解题思路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题 “珠心算测验”简述
某学校的珠心算老师采用一种快速考察珠心算加法 能力的测验方法。他随机生成一个正整数集合,集 合中的数各不相同,然后要求学生回答:其中有多 少个数,恰好等于集合中另外两个(不同的)数之 和?

noip2014模拟赛

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将一段围墙刷成一种颜色后,他无法直接从整体上欣赏整面墙:比如当前墙上一共有几种颜色的油漆。

(完整word)NOIP2014普及组解析

(完整word)NOIP2014普及组解析

第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言试题一、单项选择题(共 20题,每题 1.5分,共计 30分;每题有且仅有一个正确选项)4。

以下哪一种设备属于输出设备()。

A。

扫描仪B。

键盘C。

鼠标D。

打印机答案:D5. 下列对操作系统功能的描述最为完整的是( )。

A。

负责外设与主机之间的信息交换B。

负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D。

将源程序编译成目标程序答案:C6. CPU、存储器、I/O 设备是通过( )连接起来的.A. 接口B。

总线C。

控制线 D. 系统文件答案:B7. 断电后会丢失数据的存储器是()。

A。

RAM B。

ROM C. 硬盘 D. 光盘答案:A9. 下列选项中不属于图像格式的是()。

A. JPEG 格式 B。

TXT 格式 C。

GIF格式 D。

PNG 格式答案:B10。

链表不具有的特点是( ).A. 不必事先估计存储空间 B。

可随机访问任一元素C。

插入删除不需要移动元素 D。

所需空间与线性表长度成正比答案:B11。

下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()A. 296 B。

133 C。

256 D。

199答案:D13. 要求以下程序的功能是计算:s = 1 + 1/2 + 1/3 + ..。

+ 1/10。

#include 〈stdio.h>int main() {int n;float s;s = 1.0;for (n = 10; n 〉 1; n--)s = s + 1 / n;printf("%6。

4f\n", s);return 0;}程序导致错误结果的程序行是()。

A。

s = 1。

0; B。

for (n = 10; n > 1; n--)C. s = s + 1 / n;D. printf(”%6。

4f\n”, s);答案:C解析:1/n,/两边均为整型数,表示“整除"。

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

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同学至少要用多少次烤面包机。

NOIP2014普及组复赛试题解答

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'。

2014复赛模拟练习(C++)5

2014复赛模拟练习(C++)5

1.聪明的囚犯(prisoner.cpp)问题描述:传说从前有一个残暴的国王,喜欢杀戮百姓。

有一次,他抓到30个百姓并要一一杀掉。

在这30个百姓中间有一个聪明人,他站出来对国王说:“请国王打发慈悲,赦免两个人不死。

”国王问:“赦免哪两个人不死?”那个聪明人回答说:“我们30个人围成一圈,从1开始报数,凡数到5的人就拉出去杀掉,剩下的人继续从1开始报数,循环反复,直到剩下两个人为止,这两个人被赦免。

”国王一听很有意思,就同意了聪明人的建议,叫这30个百姓围成一圈,依依报数,凡数到5的就杀掉。

最后只剩下两个人没有被杀掉,而聪明人就是其中之一。

编写程序,输入N个百姓,由计算机判断一下,聪明人要站在什么位置,才能躲过这场屠杀。

输入要求:vara:array[1..1000] of 0..1;n,m,s,f,t,S1:integer;beginreadln(n,m);for t:=1 to m do a[t]:=0;f:=0;t:=0;s:=0;repeatt:=t+1;if t=n+1 then t:=1; if a[t]=0 then s:=s+1;if s>=m thenbegin s:=0;S1:=S1+1;IF S1>=N-1 THEN write(t,’’);a[t]:=1;f:=f+1; end;until f>=n;readln;end.输入45 5(11 41)56 5(12 49)83 5(234 786)2.算盘(abacus.cpp)4. 算盘,这个古老的计算工具是我国古代的重要发明。

在算盘上,一个档相当于整数的一位,高位在左边,所以,从右向左数,各档依次表示个位、十位、百位、……,在每个档上,靠框的珠不参与计数,靠梁的珠参与计数,且梁上面的珠每个表示5,梁下面的珠每个表示1,并规定0用本档上所有的珠都靠框来表示。

根据这个规则,上面的算盘就表示拨入了一个整数123456789(其它的档,认为是0)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

小白的名次题目描述兔子小白是位数学爱好者,有一次它参加了兔界里的数学比赛,成绩公布后,小白很想知道自己的成绩到底排第几,现在请你帮它编一个程序,要求输入一个成绩,就能知道相应的名次。

注意:同分的按相同名次算,且只算一次。

输入输入共三行。

第一行:一个整数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同学至少要用多少次烤面包机。

样例输入3 2样例输出3提示样例解释假设面包的两面分别标记为A和B,小s同学第一次烤1号和2号面包的A面,第2次烤3号面包的A面和1号面包的B面,第3次烤2号和3号面包的B面,这是使用烤面包机次数最少的方案。

数据范围10%的数据满足k<=150%的数据满足k<=4100%的数据满足n<=10, k<=10var n,k:integer;beginread(n,k);if n<=k then write(2)else write((n*2-1) div k +1);end. 输入10 10 输出2输入9 6 输出 3 输入10 8 输出 3输入5 8 输出 2n>k的情况下总可以把面包分均匀,最后只剩下<=k个一面的面包没拷世博会志愿者的选拔工作正在 A 市如火如荼的进行。

为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。

面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

【输入】输入文件名为score.in。

第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。

输入数据保证m*150%向下取整后小于等于n。

第二行到第n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。

数据保证选手的报名号各不相同。

【输出】输出文件score.out。

第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

【输入输出样例】score.in score.out6 3 88 51000 90 1005 953239 88 2390 952390 95 1000 907231 84 1001 881005 95 3239 881001 88【样例说明】m*150% = 3*150% = 4.5,向下取整后为4。

保证4 个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5 个人进入面试。

【分析】本题是一道典型的排序题。

我们可以先将选手按成绩与序号进行多关键字排序(成绩优先)在将他们顺序输出前m*150%个,输出的时候注意一下重分的处理,因为有些选手成绩可能为0。

先将由于数据量太小选排都可以在考场上拿高分。

vara:array[1..100,1000..9999] of longint;b:array[1..100] of longint;i,j,k,l,m,n,x,y,max:longint;beginassign(input,'score.in');reset(input);assign(output,'score.out');rewrite(output);readln(n,m);fillchar(a,sizeof(a),0);for i:=1 to n dobeginreadln(x,y); inc(a[y,x]); inc(b[y]);end;m:=trunc(m*1.5);max:=0;k:=0;for i:=100 downto 1 doif max<m thenbegin inc(max,b[i]);k:=i;endelse break;writeln(k,' ',max);for i:=100 downto k dobeginx:=0;for j:=1000 to 9999 dobeginif x>=b[i] then break;if a[i,j]=1 thenbegin writeln(j,' ',i); inc(x); end;end;end;close(input);close(output);end.有形如:ax3+bx2+cx+d=0这样的一个一元三次方程。

给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。

要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后4位。

【分析】如果根与根之差的绝对值>=1,则把-100到100划分成每对连续整数为上下界的区间,这个区间中不可能存在两个值,所以以此为上下界枚举每一个区间,然后采用二分法逐渐缩小根的范围,从而得到根的某精度的数值,连续找到3个数就可以了。

Program fangchen;Vara,b,c,d:real;i,k:integer;ans:array[1..3]of real;function f(x:real):real;begin exit(x*x*x*a+x*x*b+x*c+d);end;Procedure find(l,r:double);Varmid:double;Beginif (r-l<0.001) thenbeginif (l-ans[k]-1>=0)or(k=0) thenbegininc(k);ans[k]:=l;end;exit;end;mid:=(l+r)/2;if (a*l*l*l+b*l*l+c*l+d)*(a*mid*mid*mid+b*mid*mid+c*mid+d)<= 0then find(l,mid) else find(mid,r);End;Beginreadln(a,b,c,d);k:=0;for i:=-100 to 99 doif ((f(i)*f(i+1))<=0)and(k<3)then find(i,i+1);for i:=1 to k do write(ans[i]:0:2,' ');End.一条街的一边有几座房子。

因为环保原因居民想要在路边种些树。

路边的地区被分割成块,并被编号成 1..N。

每个部分为一个单位尺寸大小并最多可种一棵树。

每个居民想在门前种些树并指定了三个号码B,E,T。

这三个数表示该居民想在B和E之间最少种T棵树。

当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。

居民们想种树的各自区域可以交叉。

你的任务是求出能满足所有要求的最少的树的数量。

写一个程序完成以下工作:* 从trees.in读入数据* 计算最少要种树的数量和位置* 把结果写到trees.out【输入】第一行包含数据N,区域的个数(0<N≤30000);第二行包含H,房子的数目(0<H≤5000);下面的H行描述居民们的需要:B E T,0<B≤E≤30000,T≤E-B+1。

【输出】输出文件第一行写有树的数目,下面的行包括所有树的位置,相邻两数之间用一个空格隔开。

【样例】trees.in trees.out9 54 1 45 8 91 4 24 6 28 9 23 5 2Typepoint=recordb,e,t:integer;end;Vartree:array[1..30000]of boolean;a:array[1..5000]of point;tmp:point;h,n,i,j,k,min:integer;Beginreadln(n); readln(h);for i:=1 to h do readln(a[i].b,a[i].e,a[i].t);for i:=1 to h-1 dofor j:=i+1 to h doif a[i].e>a[j].e thenbegin tmp:=a[i];a[i]:=a[j];a[j]:=tmp;end;fillchar(tree,sizeof(tree),false);for i:=1 to h dobegink:=0;for j:=a[i].b to a[i].e do if tree[j] then inc(k); 原先这个区间有多少棵树if k<a[i].t then 不够则从右开始多种for j:=a[i].e downto a[i].e-a[i].t+k+1 dotree[j]:=true;end;min:=0; for i:=1 to n do if tree[i] then inc(min); writeln(min); 计算并输出最少种树数,此答案唯一for i:=1 to n do if tree[i] then write(i,' '); 输出方案,本题存在明显的一题多解,方案可不唯一End.n总公司拥有高效生产设备M台,准备分给下属的N个公司。

相关文档
最新文档