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题目描述一位出租车司机向你抱怨:城市发展太快,公路越来越多,他已经疲于计算行驶路线,于是求助你开发一个自动导航的工具。

  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. 多项式中,多项式的开头、结尾不含多余的空格。

相关文档
最新文档