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

合集下载

NOIP复赛模拟题一

NOIP复赛模拟题一

NOIP复赛模拟题一1、与3和5无关的数(num.cpp)描述一个正整数x,如果它能被x整除,或者它的十进制表示法中某个位数上的数字为x,则称其为与x相关的数.现求所有小于等于n(n<300)的与x无关的正整数的平方和.<300)的与x无关的正整数的平方和.</300)的与X无关的正整数的平方和.输入输入为一行,正整数n,(n<300)输出输出小于等于n的与3和5无关的正整数的平方和样例输入8(8^2+7^2+4^2+2^2+1^2)样例输出1342、小白鼠再排队(mouse.cpp)描述N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。

现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。

帽子的颜色用“red”,“blue”等字符串来表示。

不同的小白鼠可以戴相同颜色的帽子。

白鼠的重量用整数表示。

输入输入第一行为一个整数N,表示小白鼠的数目。

下面有N行,每行是一只白鼠的信息。

第一个为正整数,表示白鼠的重量,;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。

注意:白鼠的重量各不相同。

输出按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。

样例输入330 red50 blue40 green样例输出redgreenblue3、滑雪(skate.cpp)描述Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。

可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。

Michael想知道载一个区域中最长的滑坡。

区域由一个二维数组给出。

数组的每个数字代表点的高度。

下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。

在上面的例子中,一条可滑行的滑坡为24-17-16-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

2014年北京市中学生数学竞赛高一年级复赛试题及参考解答_

2014年北京市中学生数学竞赛高一年级复赛试题及参考解答_
2 2 记x 2. -5 x+6≤0 的解集为 P, x -2 a x 2 已知 PQ, 则实数 a + a -1≤0 的解集为 Q,
) ; =| x 1, 2 |∈ ( 2 方程 g( x) =0 的根为 0、 x x x | | 3、 4 三个 , 3 ( , ) =| x 0 1 . |∈ 4 ) 则方程 f( x) =0 的根为方程 f( x) =0 f( 或 f( x) =x x) =x 1 或 f( 2 的根 . , 因为函数 y=f( 的值域为[ 且 x) -1, 1] , 所 以 方 程 f( x x 1, 2) x) =x | |=| |∈ ( 1 2 1 和 而方程 f( 所 x) =x x) =0 有 3 个根 , f( 2 无根 , ) 以方程 f( x) =0 的根的个数为 3. f( ) 方程 f( x) =0 的 根 为 方 程 g( x) =0 g( ( 或 g( x) =x x) =x 1 或g 2 的根 . , 因 为 函 数 y=g( 的值域为[ 且 x) -2, 2] , 所 以 方 程 g( x x 1, 2) x) =x | |=| |∈ ( 1 2 1 和 ( ) , ( ) 各 有 个 根 同 时 方 程 3 g x =x g x =0 也 2 ) 有3 个 根 , 所 以 方 程 f( x) =0 的 根 的 个 数 g( 为 9. ) ) 同理 , 可得方程 g( x) =0 和 g( x) g( f( =0 也各有 9 个根 . 所以 a+ b+ c+d=3+9+9+9=3 0. , , 在 △A 角平分线 4. B C中A B=7 A C=5
的取值范围是 答: 2≤ a≤3.

2 解 由 x -5 x+6≤0 得 P= { x 2≤x≤ | 2 2 } , 由x 3 -2 a x+ a -1≤0 得 Q= { x a-1≤x | } , , { } 已知 即 是 a+ 1 PQ x 2 x≤ 3 { x a-1 ≤ | ≤ |

NOIP复赛模拟试题I.doc

NOIP复赛模拟试题I.doc

NOIP 复赛模拟试题(I )1. 医院设置(hospital.cpp )【问题描述】设有一棵二叉树(如下閔,其中圈中的数字表示结点中居民的人口,圈边h 数字表示结 点编号。

现在要求在某个结点上建立一个返院,使所奋佔W 所走的路程之和为最小,同吋约 定,相邻结点之M 的距离为1。

就木阁而言,若医院建在1处,则距离和 =4+12+2*20+2*40=136;若民院建在 3 处,则距离和=4*2+13+20+40=81……【输入格式(hospital.in )]其中第一行一个整数n,表示树的结点数(n<=100)。

接K 来的n 行 每行描述了一个结点的状况,包含三个整数,整数之间川空格(一 个或多个)分隔,其中:第一个数为店民人口数;第二个数为左链 接,为0表示无链接;第三个数为右链接,为0表示无链接。

【输出格式(hospital.out )】该文件只有一个整数,表示最小距离和。

【样例输入】 5 1323400 12 4 5 20 0 0 40 0 0【样例输出】812. 而税(area.cpp )【问题描述】编程计算由“* ”号围成的下列图形的面积。

面积计算方法是统计*号所围成的闭合曲线中 水平线和垂直线交点的数目。

如右K 图所示,在10*10的二维数组中,有“围住了 15个点, 因此面积为15。

在输入中,为了方便起见使用“1”来代替右图中的“*”。

【输入格式(area.in )】°输入数据保证仅冇一个10*10的01矩阵° 【输出格式(area.out )】o0 00 0 一个数,表示面积 【样例输入】000000000000001110000000100100 0000010010 0010001010()10101 0 0 1 0010*******0010000100 00011111000000000000【样例输出】153.极值问题(number.cpp)【问题描述】已知m、n为整数,且满足下列两个条件:①m、nG { 1 , 2 ,…,k},即Km, n^k②(n2—m*n —m2) 2=1你的任务是:编程输入正整数k (l<k<109),求一组满足上述两个条件的m、n,并且使m2+n2的值最大。

2014年全国高中数学联赛江苏赛区复赛参考答案与评分标准(加试)

2014年全国高中数学联赛江苏赛区复赛参考答案与评分标准(加试)

取正整数 k1 满足 1- 1k1>cos nt,由(1)可知存在正整数 n,使得 cos n>1- 1k1>22001145. 这与使 cosn>22001145成立的正整数 n 的个数是 t 矛盾.
所以存在无穷多个正整数 n,使得 cosn>22001145.
………………………50 分
2014 年全国高中数学联赛江苏赛区复赛试4 卷(加试)参考答案 第 4 页 共 4 页
从而 n<36,又因为 n 为偶数,所以 n≤34.
……………… 40 分
(3)证明 n=34 能取到.
不妨设凸 34 边形内角中只有两个值 x 和 x-20°,它们相间出现,各为一半,
有 17(2x-20°)=32×180°,x=301570°<180°.x-20°>0,
知存在满足条件的凸 34 边形.
({x}=x-[x],[x]表示不大于 x 的最大整数). 将区间[0,1)分成 M 个小区间:[0,M1 ),[M1 ,M2 ),…,[MM-1,1), 由抽屉原理可知,一定存在 1≤i<j≤M+1,使得{iα},{jα}在同一个小区间,
因此,|{jα}-{iα}|<M1 ,从而|nα-([jα]-[iα])|<M1 ,
而当 n 为偶数时,且 x1,x2,…,xn 中一半取 2,一半取 8 时,等号成立. 故当且仅当 n 为偶数,且 x1,x2,…,xn 中一半取 2,一半取 8 时等号成立.
…………………………… 40 分
2014 年全国高中数学联赛江苏赛区复赛试2 卷(加试)参考答案 第 2 页 共 4 页
Printed with FinePrint trial version - purchase at
⎩⎨⎧ 由①②知,必须有

长乐一中Day1题目

长乐一中Day1题目

全国信息学奥林匹克联赛(NOIP2014)复赛模拟题Day1长乐一中题目名称正确答案序列问题长途旅行英文名称answer sequence travel输入文件名answer.in sequence.in travel.in输出文件名answer.out sequence.out travel.out 时间限制1s1s1s空间限制256M256M256M测试点数目202010测试点分值5510是否有部分分无无无题目类型传统传统传统是否有SPJ无无无1.正确答案【题目描述】小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案。

“吔,我的答案和你都不一样!”,小Y说道,”我们去找神犇们问答案吧”。

外卡组试卷中共有m道判断题,小H与小Y一共从其他n个神犇那问了答案。

之后又从小G那里得知,这n个神犇中有p个考了满分,q个考了零分,其他神犇不为满分或零分。

这可让小Y与小H犯了难。

你能帮助他们还原出标准答案吗?如有多解则输出字典序最小的那个。

无解输出-1。

【输入格式】第一行四个整数n,m,p,q,意义如上描述。

接下来n行,每一行m个字符’N’或’Y’,表示这题这个神犇的答案。

【输出格式】仅一行,一个长度为m的字符串或是-1。

【样例输入】2220YYYY【样例输出】YY【数据范围】30%:n<=100.60%:n<=5000,m<=100.100%:1<=n<=30000,1<=m<=500.0<=p,q且p+q<=n.2.序列问题【题目描述】小H是个善于思考的学生,她正在思考一个有关序列的问题。

她的面前浮现出了一个长度为n的序列{ai},她想找出两个非空的集合S、T。

这两个集合要满足以下的条件:1.两个集合中的元素都为整数,且都在[1,n]里,即Si,Ti∈[1,n]。

2.对于集合S中任意一个元素x,集合T中任意一个元素y,满足x<y。

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

NOIP复赛模拟练习题

NOIP复赛模拟练习题(一)1.埃及分数源文件:egfranc.pas/c/cpp可执行文件:egfranc.exe输入文件:egfranc.in输出文件:egfranc.out古代埃及人喜欢用分子为1的分数,即使是普通的分数他们也喜欢将它转为若干个分子为1的分数的和。

如2/5,他们习惯表示为:1/3+1/15。

现要求你将输入的一个分子不为1的真分数转为若干个分子为1的不同的分数的和,输出要求按分母由小到大的顺序,并且是分母尽可能的小。

输入两个自然数A、B,分别表示分子和分母,输出相应的埃及分数。

样例:egfranc.in2 5egfranc.out2/5=1/3+1/152.N个因子的最小自然数源文件:minnat.pas/c/cpp可执行文件:minnat.exe输入文件:minnat.in输出文件:minnat.out一个自然数总有若干个因子,如6有4个因子:1,2,3,6。

现要求你对于给定的自然数n(1<n<=10000),求出有n个因子的最小自然数。

输入就一个数n,输出有n个因子的最小自然数。

样例:minnat.in15minnat.out1443.数字拆成K份源文件:numkd.pas/c/cpp可执行文件:numkd.exe输入文件:numkd.in输出文件:numkd.out将一个正整数n拆成k个正整数之和,如n=5,k=2时,不同的拆分方法有两种:5=1+4=2+3。

现要求根据给定的n和k,求出可能的不同拆分的数目。

输入就一行两个数,分别表示n和k(1<n<1000,0<k<=n),输出就一个数字,表示不同的拆分方法数目。

样例:numkd.in5 2numkd.out24、好心的出租车司机源文件:taxi.pas/c/cpp可执行文件:taxi.exe输入文件:taxi.in输出文件:taxi.out题目描述一位出租车司机向你抱怨:城市发展太快,公路越来越多,他已经疲于计算行驶路线,于是求助你开发一个自动导航的工具。

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复赛普及组第一题题解

活动园地NOIP2014复赛普及组第一题题解原题一、题目简化:求N个正数中有多少个数是这些数中其它两个数的和。

3<=N<=100; 每个正整数M:1<=M<=10000;二、过程分析:试题显然可以分成三个步骤求解:1、先求出N个数中每两个数的和;2、判断这些和中有没有重复,重复的数只留下一个;3、N个数中的每一个数都与这些和比较,若相等些记下,比较完成,即得其解。

三、算法与策略:三个步骤都采用一一列举所有可能的方法,是典型的枚举。

四、程序设计思路:1、一维数组A存放N个数,一维数组B存放两两相加的和;求和、判断重复、比较两数是否相等,都采用两重循环,i 控制外循环,j 控制内循环,k表示数组B的下标变化,ans表示题目答案。

数组a最多100个元素,考虑到用循环,为防止下标越界,可适当把数组开大一些,a[0..101];数组b中元素数是N个数两个数两两相加的和的个数,由于N最大是100,所以和的个数最多是1+2+3+……99=4950个,则b[0..5000]五、程序设计:program count;vara:array[0..101] of longint;b:array[0..5000] of longint;n,ans,i,j,k:longint;beginassign(input,'count.in');reset(input);assign(output,'count.out');rewrite(output);readln(n);for i:=1 to n doread(a[i]);fillchar(b,sizeof(b),0);**下面开始步骤1:a中的数两两相加放在b中**k:=1;for i:=1 to n-1 dofor j:=i+1 to n dobeginb[k]:=a[i]+a[j];inc(k);end;**下面开始步骤2:筛掉b中的重复数据:**for i:= 1 to (k-1)-1 do for j:=i+1 to k-1 do begin if b[i]:=b[j] then b[j]:=0; end;**下面开始步骤3:比较a 数组中有多少个数与b 数组中的数相等:** ans:=0; for i:=1 to n dofor j:=1 to k-1 do begin if (a[i]=b[j]) then inc(ans); end;**比较结束,结果已得出,下面输出结果,关闭文件,结束程序** write(ans); close(input) close(output); end.六、时间复杂度分析:三个步骤采用了三个双重循环,每个双重循环运行约N ·∑-=11n i i 次,若N =100,则整个程序运行约150万次操作,T (N )=0(N 3)理论上讲,还可以忍受。

NOIP2014普及组复赛试题

NOIP2014普及组复赛试题

1. 珠心算测验【问题描述】 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。

珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。

他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 最近老师出了一些测验题,请你帮忙求出答案。

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

输入共两行,第一行包含一个整数n ,表示测试题中给出的正整数个数。

第二行有n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

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

输出共一行,包含一个整数,表示测验题答案。

【输入输出样例】 count.in count.out 4 1 2 3 42【样例说明】由1+2=3,1+3=4,故满足测试要求的答案为2。

注意,加数和被加数必须是集合中的两个不同的数。

【数据说明】对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。

2.比例简化【问题描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。

例如,对某一观点表示支持的有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。

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)【问题描述】某校开展了同学们喜闻乐见的阳光长跑活动。

小学组2014

小学组2014

2014年山东省信息学奥林匹克联赛(NOIP2014)复赛小学组试题(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

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

1.读书(book.cpp/c/pas)【问题描述】你的家长最近给你买了一本新书,共n页。

你第一天看了a页,以后每天比前一天多看b页,那么最后一天看多少页?【输入】输入文件名为book.in。

输入共一行,包含三个正整数n、a、b,中间用空格隔开。

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

输出共一行,包含一个正整数,表示最后一天看的页数。

【输入输出样例】【样例说明】第1天,25页;第2天,30页;第3天,35页;第4天,10页。

【数据范围】对于50%的数据,0<n<=30,000;对于100%的数据,0<n<=2,000,000,000。

2.蚂蚁爬竹竿(ant.cpp/c/pas)【问题描述】n只蚂蚁以每秒1厘米的速度在长为L厘米的水平放置的竹竿上爬行。

当蚂蚁爬到竹竿的任意一个端点时就会掉落。

对于每只蚂蚁,我们知道开始时它距离竹竿左端的距离为ai。

请计算所有蚂蚁都掉落下竹竿时所需的最短时间。

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

第一行,n,蚂蚁的数量。

第二行,L,竹竿的长度。

第三行,n只蚂蚁距离竹竿左端点的距离。

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

输出共一行,包含一个正整数,表示所有蚂蚁都掉下竹竿所需的最短时间。

【输入输出样例】【样例说明】3只蚂蚁都爬下竹竿最快的方法是:第1只蚂蚁往左爬下竹竿需要2秒;第2只蚂蚁往右爬下竹竿需要4秒;第3只蚂蚁往右爬下竹竿需要3秒。

所以3只蚂蚁全都爬下竹竿所需的最短时间是4秒。

【数据范围】对于50%的数据:1<=L<=10000;1<=n<=1000;0<=ai<=L;对于100%的数据:1<=L<=1000000000;1<=n<=1000000;0<=ai<=L。

NOIP复赛模拟试题I

NOIP复赛模拟试题I

NOIP 复赛模拟试题(I )1.医院设置(hospital.cpp ) 【问题描述】设有一棵二叉树(如下图,其中圈中的数字表示结点中居民的人口,圈边上数字表示结点编号。

现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻结点之间的距离为1。

就本图而言,若医院建在1处,则距离和=4+12+2*20+2*40=136;若医院建在3处,则距离和=4*2+13+20+40=81…… 【输入格式(hospital.in )】 其中第一行一个整数n ,表示树的结点数(n<=100)。

接下来的n 行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,其中:第一个数为居民人口数;第二个数为左链接,为0表示无链接;第三个数为右链接,为0表示无链接。

【输出格式(hospital.out )】该文件只有一个整数,表示最小距离和。

【样例输入】 5 13 2 3 4 0 0 12 4 5 20 0 0 40 0 0【样例输出】 812.面积(area.cpp ) 【问题描述】编程计算由“*”号围成的下列图形的面积。

面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。

如右下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。

在输入中,为了方便起见使用“1”来代替右图中的“*”。

【输入格式(area.in )】输入数据保证仅有一个10*10的01矩阵 【输出格式(area.out )】 一个数,表示面积 【样例输入】0 0 0 0 0 0 0 0 0 00 0 0 0 1 1 1 0 0 00 0 0 0 1 0 0 1 0 00 0 0 0 0 1 0 0 1 00 0 1 0 0 0 1 0 1 00 1 0 1 0 1 0 0 1 00 1 0 0 1 1 0 1 1 00 0 1 0 0 0 0 1 0 00 0 0 1 1 1 1 1 0 00 0 0 0 0 0 0 0 0 0【样例输出】153. 极值问题(number.cpp)【问题描述】已知m、n为整数,且满足下列两个条件:①m、n∈{1,2,…,k},即1≤m,n≤k②(n2-m*n-m2)2=1你的任务是:编程输入正整数k(1≤k≤109),求一组满足上述两个条件的m、n,并且使m2+n2的值最大。

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

NOIP14模拟

NOIP14模拟

NOIP2014day1 final模拟试题题目一览竞赛时间:3.5小时注意事项:1.输入文件名及输出文件名均为:主文件名.in及主文件名.out;2.选手需提交源文件(.c, .cpp, .pas,)及可执行文件(.exe),并存盘与以选手名命名的文件夹中,文件名必须使用小写;3.C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0;4.本次考试使用清橙测试软件,机器为机房标配;5.考试时间为3.5小时,请认真对待,争取高分。

1.铺地毯(carpet.cpp/c/pas)【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。

一共有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】carpet.in carpet.out3 31 02 30 2 3 32 13 32 2【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。

【输入输出样例2】carpet.in carpet.out3 -11 02 30 2 3 32 13 34 5【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。

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

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

【问题描述】请统计某个给定范围[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.聪明的囚犯:传说从前有一个残暴的国王,喜欢杀戮百姓。

有一次,他抓到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)4. 算盘,这个古老的计算工具是我国古代的重要发明。

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

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

算盘的初始状态是所有的珠都靠框,即所有档上都是0。

请编写程序计算一下,从初始状态拨入一个整数n(位数≤17),一共需要拨动多少个珠?样例输入:8102样例输出:7varc:char;sum,n:integer;beginsum:=0;repeatread(c);if ord(c)=13 then break;n:=ord(c)-ord('0');if n>=5 then n:=n-4;sum:=sum+n;until false;writeln(sum);end.1、输入:12345678901234567输出:412、输入:700输出:33、输入:1000005输出:24、输入:47688798803132输出:425.现在有一个长度为N(1<=N<=1000)的并且每个数只可能是1或2或3的数列,求至少要交换多少次,才能得到一个升序的序列。

如输入N=5, 1 3 3 2 2则输出2var a:array[1..1000] of integer;n,i,j,t,n1,n2,m:longint;beginassign(input,'sort3.in');assign(output,'sort3.out');reset(input);rewrite(output);fillchar(a,sizeof(a),0);readln(n);n1:=0;n2:=0;m:=0;for i:=1 to n dobeginread(a[i]);if a[i]=1 then inc(n1);if a[i]=2 then inc(n2);end;for i:=1 to n1 doif a[i]=2 thenbegininc(m);j:=n1;repeat inc(j) until a[j]=1;t:=a[i];a[i]:=a[j];a[j]:=t;endelse if a[i]=3 thenbegininc(m);j:=n+1;repeat dec(j) until a[j]=1;t:=a[i];a[i]:=a[j];a[j]:=t;end;for i:=n1+1 to n1+n2 doif a[i]=3 thenbegininc(m);j:=n+1;repeat dec(j) until a[j]=2;t:=a[i];a[i]:=a[j];a[j]:=t;end;writeln(m);close(input);close(output);end.输入8 1 2 2 3 3 1 2 3 输出3输入12 3 2 2 1 2 3 3 2 1 1 2 3 输出5输入20 3 3 2 2 3 3 1 1 3 2 2 2 3 1 1 1 3 3 2 1 输出7输入30 2 2 1 3 2 3 2 2 1 1 3 3 3 3 2 2 3 1 1 2 1 3 3 1 2 3 3 3 1 3 输出126.一个果园主种植了一批果树,果树在二个方向上被均匀地种植在一个矩形空间内,所以,这些树形成了矩形的网格,而且我们假定每棵树都恰巧种植在整数坐标位置,坐标系统的原点位于左下角,如下图所示:现在考虑将一些三角形覆盖在此网格上,三角形的顶点为任意从0.0到100.0的实数坐标,树的坐标范围为1到99,上图给出了一个可能的实例。

设计一个程序,计算包含在给定三角形之内的树的数量。

为了便于解题,可以假定每棵树仅为一个点的大小,并且任意位于三角形边界上的树(点)可看作位于三角形之内。

输入:程序的输入包含6个大小从0.00到100.00的实数x1 y1 x2 y2 x3 y3),代表一个三角形的三个顶点坐标。

输出:输出一行,表示该三角形覆盖的树的数量。

输入输出样例一:1.5 1.5 1.5 6.8 6.8 1.515输入输出样例二:10.7 6.9 8.5 1.5 14.5 1.517varx1,y1,x2,y2,x3,y3,x4,y4,s0,s1,s2,s3 : real;i,j,t : word; function area(x1,y1,x2,y2,x3,y3 :real) :real;var a,b,c,d :real;begina := sqrt(sqr(x1-x2)+sqr(y1-y2));b := sqrt(sqr(x2-x3)+sqr(y2-y3));c := sqrt(sqr(x1-x3)+sqr(y1-y3));d := (a+b+c)/2;area := sqrt(d*(d-a)*(d-c)*(d-b));end;beginwriteln('Input x1,y1,x2,y2,x3,y3 : ');readln(x1,y1,x2,y2,x3,y3);t := 0;s0 := area(x1,y1,x2,y2,x3,y3);for i := 1 to 99 dofor j := 1 to 99 do beginx4 := i; y4 := j;s1 := area(x1,y1,x2,y2,x4,y4);s2 := area(x1,y1,x3,y3,x4,y4);s3 := area(x2,y2,x3,y3,x4,y4);if abs(s1+s2+s3-s0) < 0.0000001 then inc(t); end;writeln(t);readln;end.输入 8.5 9.4 7.8 6.2 10.6 9.3 输出 4输入 7.9 6.5 4.8 2.3 10.8 4.2 输出 10输入 5.6 9.7 4.7 3.9 8.4 5.1 输出 11输入 88.5 99.4 90.6 78.8 92.1 89.5 输出 278. 多项式输出【题目描述】一元n 次多项式可用如下的表达式表示:其中,a i x i称为i 次项,a i称为i次项的系数。

给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。

2. 多项式中只包含系数不为0 的项。

3. 如果多项式n 次项系数为正,则多项式开头不出现“+”号,如果多项式n 次项系数为负,则多项式以“-”号开头。

4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。

紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。

如果x 的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b 为x 的指数;如果x 的指数为1,则接下来紧跟的指数部分形式为“x”;如果x 的指数为0,则仅需输出系数即可。

5. 多项式中,多项式的开头、结尾不含多余的空格。

相关文档
最新文档