NOIP普及组复赛试题
CCF全国信息学奥林匹克联赛NOIP普及组复赛试题
CCF全国信息学奥林匹克联赛NOIP普及组复赛试题CCF全国信息学奥林匹克联赛(NOIP2018)复赛普及组(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-****************,内存32GB。
上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1. 标题统计(title.cpp/c/pas)【问题描述】凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。
统计标题字符数时,空格和换行符不计算在内。
【输入格式】输入文件名为title.in。
输入文件只有一行,一个字符串s。
【输出格式】输出文件名为title.out。
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
见选手目录下的title/title1.in和title/title1.ans。
【输入输出样例1说明】标题中共有3个字符,这3个字符都是数字字符。
见选手目录下的title/title2.in和title/title2.ans。
【输入输出样例2说明】标题中共有5个字符,包括1个大写英文字母,1个小写英文字母和2个数字字符,还有1个空格。
由于空格不计入结果中,故标题的有效字符数为4个。
【数据规模与约定】规定|s|表示字符串s的长度(即字符串中的字符和空格数)。
对于40%的数据,1≤|s|≤5,保证输入为数字字符及行末换行符。
对于80%的数据,1≤|s|≤5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于100%的数据,1≤|s|≤5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。
NOIP普和组复赛试题c版本
{
if(d[i+l1][j+l2]!=-1)
d[i+l1][j+l2]++;
}//边上八个位置旳格子不是雷则
数值加1
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
if(
d[i][j]==-1) cout<<'*';
else cout<<d[i][j];
cout<<endl;
-5-
参照程序
➢ #include <iostream>
➢ using namespace std;
➢ int main()
➢{
➢
long d[102][102];
➢
long n,m;
➢
cin>>n>>m;
➢
long i,j;
➢
char ch;
➢
for(i=0;i<=n;i++)
➢
{
➢
for(j=0;j<=m;j++)
➢
for(int i=1;i<=n;i++)
➢
{
- 16 -
BYE
温馨提醒: 先了解题目在看题解。
试题分析
The END
2017. 07. 28
➢ 请计算前K天里,骑士一共取得了多少金币。 ➢ 对于全部数据,1≤K≤10000。
➢ 【分析】K旳规模比较少,直接用模拟,一天一天发金币。 ➢ N天发N枚金币,N递增1,剩余天数K-N ➢ 估计时间15-25分钟
noip普及组复赛模拟试题8(答案)
Description 给定整数n(32位以内),判断它是否为2的方幂。
是就输出'yes',否则输出'no'。
Input 一个整数n。
Output 一个字符串Sample Input 4Sample Output yesHintn > 0 && ( ( n & ( n - 1 ) ) == 0貌似是数学问题,套用了提示program ex1560;var n:longint;beginreadln(n);if (n>0) and (n and (n-1)=0) then write('yes') else write('no'); end.输入 127 输出 NO 输入 262144 输出 YES 输入 68719476736 输出 YES问题描述:计算机软件版本通常被用来区分某种软件在不同时间的发布。
大部分软件版本号都是用“.”分隔的非负数的序列。
对两个不同的版本A = a1.a2.a3…an和B = b1.b2.b3…bm,如果下面两个条件之一成立,我们认为版本A要比版本B新:1.对某个i,我们有:对所有j < i, ai > bi 和aj = bj;2.n比m大,而且对所有i < m, ai = bi。
(ai和bi都不超过LONGINT)在这个问题里,你要对给定的一组版本号,按照上面的定义从旧到新排序。
输入文件(VERSIONS.IN):输入文件第一行是一个整数N(N<=20),表示要排序的版本数。
接下来的N行每行一个版本号。
每个版本号是长度不超过50的字符串。
输出文件(VERSIONS.OUT):将排好序的结果以每行一个版本号输出。
输入输出样例:VERSIONS.IN43.0.512.42.4.6VERSIONS.OUT12.42.4.63.0.5var n,i:integer;scan:array [1..30] of string;function check(aa,bb:string):boolean;vara,b:longint;i,j:integer;code:integer;beginaa:=aa+'.'; bb:=bb+'.';i:=pos('.',aa); j:=pos('.',bb);while (i>0) and (j>0) do beginval(copy(aa,1,i-1),a,code);val(copy(bb,1,j-1),b,code);if a<b then exit(true);if a>b then exit(false);delete(aa,1,i);delete(bb,1,j);i:=pos('.',aa);j:=pos('.',bb);end;if (i=0) and (j>0) then exit(true) else exit(false); end;procedure qsort(l,r:integer);vari,j:integer;t:string;beginif l>=r then exit;i:=random(r-l)+l;t:=scan[i];scan[i]:=scan[l];i:=l;j:=r;repeatwhile (i<j) and (check(t,scan[j])) do dec(j);if i=j then break; scan[i]:=scan[j];while (i<j) and (check(scan[i],t)) do inc(i);if i=j then break; scan[j]:=scan[i];until i=j;scan[i]:=t;qsort(l,i-1);qsort(i+1,r);end;beginreadln(n);for i:=1 to n do readln(scan[i]); qsort(1,n);for i:=1 to n do writeln(scan[i]); end.输入73.0.5.11.02.22.2.62.2.83.0.5.43.0 输出1.02.22.2.62.2.83.03.0.5.13.0.5.4输入1211.0.21.0.36.23.43.4.222.12.1.43.4.14.24.2.2输出 11.0.21.0.322.12.1.43.43.4.13.4.24.24.2.26.2输入正整数N、M,求N÷M的值。
noip普及组复赛模拟试题22(答案)
军方截获的信息由n(n<=30000)个数字组成,因为是敌国的高端秘密,所以一时不能破获。
最原始的想法就是对这n个数进行小到大排序,每个数都对应一个序号,然后对第i个是什么数感兴趣,现在要求编程完成。
【输入格式】第一行n,接着是n个截获的数字,接着一行是数字k,接着是k行要输出数的序号。
【输出格式】k行序号对应的数字。
【输入样例】Secret.in5121 1 126 123 73243【输出样例】Secret.out7123121program secret;const max=30000;var n,i,x,k:longint;a:array[1..max] of longint;procedure sort(l,r:longint);var i,j,t,mid:longint;begini:=l;j:=r;mid:=a[(l+r)div 2];repeatwhile a[i]<mid do inc(i);while a[j]>mid do dec(j);if j>=i thenbegint:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j)end;until i>j;if l<j then sort(l,j);if i<r then sort(i,r);end;assign(input,'secret.in');assign(output,'secret.out');reset(input);rewrite(output);readln(n);for i:=1 to n do read(a[i]);sort(1,n);readln(k);for i:=1 to k dobeginreadln(x);writeln(a[x]);end;close(input);close(output);end.输入1512 10 36 127 126 123 75 89 101 999 777 654 456 890 134624391014 输出127536127134890输入248 18 12 24 434 10 36 127 126 123 75 89 101 999 777 654 456 890 134 555 221 108 888 65685431920141710 输出2412654656134456108有一只坏的里程表:它总是跳过数字3和数字8。
noip普及组复赛试题及答案
noip普及组复赛试题及答案一、选择题1. 在计算机科学中,以下哪个概念与数据结构最相关?A. 算法B. 操作系统C. 网络协议D. 编译原理答案:A2. 以下哪种排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D3. 在C++中,以下哪个关键字用于定义类?A. structB. unionC. enumD. typedef答案:A4. 以下哪个选项不是数据库管理系统(DBMS)的特性?A. 数据持久性B. 数据共享C. 数据加密D. 数据独立性答案:C5. 在计算机网络中,TCP和UDP协议分别属于哪一层?A. 传输层B. 应用层C. 网络层D. 物理层答案:A二、填空题1. 在计算机程序中,______ 用于定义数据的存储方式和组织形式。
答案:数据结构2. 一个算法的时间复杂度为O(1),表示该算法的执行时间与输入数据的规模______。
答案:无关3. 在C++中,______ 是一种特殊的类,它提供了一种方式来定义数据类型。
答案:typedef4. 数据库管理系统(DBMS)通常包含数据定义语言(DDL)、数据操纵语言(DML)和______。
答案:数据控制语言(DCL)5. 在计算机网络中,______ 协议负责在网络层进行数据包的路由选择。
答案:IP三、简答题1. 请简述面向对象编程(OOP)的三个基本特征。
答案:封装、继承、多态2. 描述二分查找算法的基本步骤。
答案:二分查找算法的基本步骤包括:首先确定数组是有序的,然后取中间元素与目标值比较,如果中间元素等于目标值,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找,直到找到目标值或查找范围为空。
四、编程题1. 编写一个函数,实现对整数数组的排序。
答案:以下是一个简单的冒泡排序算法实现:```cppvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);}}}}```2. 编写一个函数,实现计算一个整数的阶乘。
NOIP复赛普及组模拟题4
普及组
模拟赛
题目概况
题目名称 输入文件名 输出文件名 提交程序名 每个测试点时限
空间限制
晴天小猪历险记 hill.in hill.out hill.* 1秒 128M
卡布列克圆舞曲 kblk.in kblk.out kblk.* 1秒 128M
山峰暸望 mount.in mount.out mount.*
山的宽度定义为在这个山上进行的测量的次数(也就是序列的长度)。请帮 Bessie 找到最宽的山。
这是一个比较典型的地平线的例子:
*******
*
*********
***
**********
*****
***********Leabharlann **********
*
*****************
***********
*** *
** ******************* ************* * * *******
*
*********************************************************************
321111233367777777654333211111234445676543211121211111234323211111121
输入格式 第一行有一个数 n(2<=n<=1000),表示山的高度。 从第二行至第 n+1 行,第 i+1 行有 i 个数,每个数表示晴天小猪在这一段山
路上需要爬的时间。 输出格式
一个数,即晴天小猪所需要的最短时间。 样例输入 5 1 23 456 10 1 7 8 11456 样例输出 10
noip普及组复赛入门测试(答案+测试数据)
一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。
现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数X,表示有X组输入数据。
每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。
每次弹起的高度都是上一次高度的一半。
求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。
noip普及组复赛模拟试题9答案
给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?Input 一行,两个非负整数A和B(32位以内)。
Output 一行,一个整数。
Sample Input 1 0Sample Output 1program ex1558;var a,b,d:longint;t,s,i:integer;beginreadln(a,b);d:=a xor b;s:=0;for i:=1 to 32 dobegint:= d and 1 ;d:=d shr 1;s:=s+t;end;writeln(s);end. 输入 15 4 输出 3输入 3248 125 输出 7 输入 567894321 12134 输出16【试题描述】做操的时间到了,小明和另外几个同学没有吸取上一次的教训,在教室思考讨论老师讲的一道题目(学习用功型),当他们想通这个题时,其他同学已经在操场上排好队了,他们快速来到操场,希望尽快找到以前排队的位置,准备做操,小明他们记得应该排在某学号同学的后面。
你能不能来帮帮小明他们呢?【输入描述】输入(三行):n m(现在队伍的长度待插入的同学人数)n个同学的学号(5位整数)m组数据(每组2个,分别为插入位置的学生学号插入的学生学号)【输出描述】n+m个学号(插入后每个学生的学号)【输入样例】4 234812 34123 23133 4583134123 23483 45831 83123【输出样例】34812 34123 23483 23133 45831 83123program ex1144;var i,j,n,m:integer;a:array[1..300] of longint;b,c:longint;procedure make(x,y:longint);var i,t:integer;beginfor i:=1 to n doif x=a[i] then begin t:=i+1;break; end;for i:=n downto t do a[i+1]:=a[i];a[t]:=y;n:=n+1;end;beginreadln(n,m);for i:=1 to n do read(a[i]);for i:=1 to m dobeginread(b,c);make(b,c) ;end;for i:=1 to n-1 do write(a[i],' ');write(a[n]);end.输入 8 334812 34123 23133 45831 34517 45830 23134 3412034123 23483 45831 83123 34517 43234输出 34812 34123 23483 23133 45831 83123 34517 43234 45830 23134 34120输入 10 434812 34123 23133 45831 34517 45830 23134 34120 23122 3410934123 23483 45831 83123 34517 43234 23122 23167输出 34812 34123 23483 23133 45831 83123 34517 43234 45830 23134 34120 23122 23167 34109问题描述:如果一个数包含了0--9这十个数字,就称为十全数,因此1023456789是最小的十全数。
NOIP普及组复赛试题
P1909 买铅笔题目描述P教师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。
她发觉商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价钱也有可能不同。
为了公平起见,P教师决定只买同一种包装的铅笔。
商店不许诺将铅笔的包装拆开,因此P教师可能需要购买超过n支铅笔才够给小朋友们发礼物。
此刻P教师想明白,在商店每种包装的数量都足够的情形下,要买够至少n支铅笔*最少*需要花费多少钱。
输入输出格式输入格式:输入的第一行包括一个正整数n,表示需要的铅笔数量。
接下来三行,每行用两个正整数描述一种包装的铅笔:其中第一个整数表示这种包装内铅笔的数量,第二个整数表示这种包装的价钱。
保证所有的7个数都是不超过10000的正整数。
输出格式:输出一行一个整数,表示P教师最少需要花费的钱。
输入输出样例输入样例#1:输出样例#1:输入样例#2:说明铅笔的三种包装别离是:•2支装,价钱为2;•50支装,价钱为30;•30支装,价钱为27。
P教师需要购买至少57支铅笔。
若是她选择购买第一种包装,那么她需要购买29份,共计2x29 = 58支,需要花费的钱为2x29 = 58。
事实上,P教师会选择购买第三种包装,如此需要买2份。
尽管最后买到的铅笔数量更多了,为30x2 = 60支,但花费却减少为27 x2 = 54,比第一种少。
关于第二种包装,尽管每支铅笔的价钱是最低的,但要够发必需买2份,实际的花费达到了30 x 2 = 60,因此P教师也可不能选择。
因此最后输出的答案是54。
【子任务】子任务会给出部份测试数据的特点。
若是你在解决题目中碰到了困难,能够尝试只解决一部份测试数据。
每一个测试点的数据规模及特点如下表:上表中“整倍数”的意义为:假设为“K”,表示对应数据所需要的铅笔数量n—定是每种包装铅笔数量的整倍数(这意味着必然能够不用多买铅笔)。
P2020 回文日期题目描述在日常生活中,通过年、月、日这三个要素能够表示出一个唯一确信的日期。
noip普及组复赛入门训练1答案
noip普及组复赛入门训练1答案PASCAL复习21. 字符统计(文件名ZFTJ.PAS)读入一组字符,以“?”作为结束标志,统计其中元音字母、辅音字母、数字和其它符号个数(“?”作为结束标志,不计算个数)。
如输入字符为SouA56#s?,则输出YY=3,FY=2,SZ=2,QT=1。
输入输出样例:输入:SouA56#sEenTk3&?输出:YY=5,FY=5,SZ=3,QT=2var s1,S2,S3,S4,t:longint;c:char;begin S1:=0;S2:=0;S3:=0;S4:=0;while c<>'?' dobegin read(c);if ((c>='a') and (c<='z')) or ((c>='A') AND (C<='Z')) THENif (c='a') or (c='e') or (c='i') OR (c='o') or (c='u') or(c='A') OR (c='E') OR (c='I') OR (c='O') OR (c='U')THEN S1:=S1+1 ELSE S2:=S2+1ELSEIF (c>='0') and (c<='9') then s3:=s3+1ELSE S4:=S4+1;end;writeln('YY=',S1,'FY=',S2,'SZ=',S3,'QT=',S4-1);END.2.取数(QS.PAS)问题描述:我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相邻的两个不可以同时被取走。
noip复赛普及组试题
CCF 全国信息学奥林匹克联赛〔NOIP2021 〕复赛普及组〔请选手务必仔细阅读本页内容〕一.题目大要中文题目名称金币扫雷游戏求和销售员英文题目与子目录名coin mine sum salesman 可执行文件名coin mine sum salesman 输入文件名输出文件名每个测试点时限 1 秒 1 秒 1 秒 1 秒测试点数量10101010每个测试点分值10101010附加样例文件有有有有结果比较方式全文比较〔过滤行末空格及文末回车〕题目种类传统传统传统传统运行内存上限128M128M128M128M 二.提交源程前言件名对于 C++语言对于C语言对于 pascal语言三.编译命令〔不包括任何优化开关〕对于 C++语言g++ -o coin -g++ -o mine -g++ -o sum -g++ -o salesmanlm lm lm-lm 对于C语言gcc -o coin gcc -o mine gcc -o sum gcc -o salesman-lm-lm-lm-lm对于 pascal语言fpc fpc fpc fpc 本卷须知:1、文件名〔程序名和输入输出文件名〕必定使用英文小写。
2、 C/C++中函数 main()的返回值种类必定是int,程序正常结束时的返回值必定是3、全国一致评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor4G,上述时限以此配置为准。
0 。
,,内存4、只供应 Linux格式附加样例文件。
5、特别提示:评测在当前最新宣告的NOI Linux下进行,各语言的编译器版本以其为准。
1.金币c/pas)国王将金作工,放忠的士。
第一天,士收到一枚金;此后两天〔第二天和第三天〕,每天收到两枚金;此后三天〔第四、五、六天〕,每天收到三枚金;此后四天〔第七、八、九、十天〕,每天收到四枚金⋯⋯;种工放模式会素来延下去:当 N 天每天收到 N 枚金后,士会在此后的 N+1 天里,每天收到 N+1 枚金。
noip普及组复赛模拟试题14(附答案)
解的个数(count)给定一个正整数K,问有多少和正整数X,Y满足X>=Y且1/K=1/X+1/Y,将所有解按X降序输出。
输入第一行一个数T,表示数据组数以下T行,每行一个数K输出T部分,每部分第一行一个数K,以下一次按X降序输出所有解,个数见样例,注意=+两边都有空格。
样例输入2212样例输出21/2 = 1/6 + 1/31/2 = 1/4 + 1/481/12 = 1/156 + 1/131/12 = 1/84 + 1/141/12 = 1/60 + 1/151/12 = 1/48 + 1/161/12 = 1/36 + 1/181/12 = 1/30 + 1/201/12 = 1/28 + 1/211/12 = 1/24 + 1/24数据规模30% K<=20100% K<=10000,T<=10标程:var t,i,j,l,n,k:integer;a:array[1..20] of integer;b,c:array[1..10000] of longint;procedure shou(n:integer);var k,s:longint;begink:=n+1;s:=n*2;l:=0;for i:=k to s dobeginif n*i mod (i-n)=0 thenbegininc(l);b[l]:=(n*i) div (i-n);c[l]:=i;end;end;end;beginassign(input,'count.in');reset(input);assign(output,'count.out'); rewrite(output);readln(t);for i:=1 to t doreadln(a[i]);for k:=1 to t dobeginshou(a[k]);writeln(l);for j:=1 to l dowriteln(1,'/',a[k],' ','=',' ',1,'/',b[j],' ','+',' ',1,'/',c[j]);end;close(input);close(output);end.输入341532输出31/4 = 1/20 + 1/51/4 = 1/12 + 1/61/4 = 1/8 + 1/851/15 = 1/240 + 1/161/15 = 1/90 + 1/181/15 = 1/60 + 1/201/15 = 1/40 + 1/241/15 = 1/30 + 1/3061/32 = 1/1056 + 1/331/32 = 1/544 + 1/341/32 = 1/288 + 1/361/32 = 1/160 + 1/401/32 = 1/96 + 1/481/32 = 1/64 + 1/64不等数列(num.cpp/c/pas)【题目描述】将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。
noip普及组复赛模拟试题24(答案)
1.质因数分解(prime.cpp/c/pas)【问题描述】已知正整数n 是两个不同的质数的乘积,试求出较大的那个质数。
【输入】输入文件名为prime.in。
输入只有一行,包含一个正整数n。
【输出】输出文件名为prime.out。
输出只有一行,包含一个正整数p,即较大的那个质数。
【输入输出样例】prime.in prime.out21 7【数据范围】对于60%的数据,6 ≤ n ≤ 1000。
对于100%的数据,6 ≤ n ≤ 2*109。
var i,j,n:longint;f:boolean;function sushu(i:longint):boolean;beginf:=true;for j:=2 to trunc(i/2) doif i mod j=0 then begin f:=false; sushu:=false; exit; end;if f then sushu:=true;end;beginassign(input,'prime.in');assign(output,'prime.out');reset(input);rewrite(output);readln(n);for i:=trunc(n/2) downto 2 doif (n mod i=0) and (sushu(i)) then beginwriteln(i);break;end;close(input);close(output);end.输入998 输出499 输入1999520027 输出99991设有一个数组A:array [0..N-1] of integer;存放的元素为0~N-1(1<N<=10)之间的整数,且A[i]≠A[j](i≠j)。
例如当N=6时,有:A=(4,3,0,5,1,2)。
此时,数组A 的编码定义如下:A[0]编码为0;A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)∴上面数组A的编码为:B=(0,0,0,3,1,2)要求编程解决以下问题:(1)给出数组A后,求出其编码;(2)给出数组A的编码后,求出A中的原数据程序样例:例一:输入:Stat=1 {表示要解决的第(1)问题}N=8 {输入8个数}A=1 0 3 2 5 6 7 4输出:B=0 0 2 2 4 5 6 4例二:输入:Stat=2 {表示要解决的第(2)问题}N=7B=0 1 0 0 4 5 6输出:A=2 3 1 0 4 5 6[解]第1个问题的解法:用穷举搜索法。
noip普及组复赛模拟试题15(附答案)
【基础】班委确定【试题描述】经过紧张而激烈的选拔考试,编程班终于浮出水面,一共有k位同学幸运的入选,这k位同学个个可都是精英,才华横溢,思维敏捷。
让谁做班长?让谁做学习委员?让谁做团委书记呢……?这可让班主任老师伤透了脑筋。
个个都优秀,个个都能干,实在是没有办法了。
抓阄吧!这个抓阄可不是普通的抓阄,老师让这k位同学围成一圈从一号位置开始顺时针报数报到m这个人就出圈(啊?猴子选大王啊!把我们当猴子啦?Of course not),出圈后就反向逆时针从下一个开始报数,报到n再出圈,然后再反向顺时针报到m出圈,反向逆时针报到n出圈……圈里的人越来越少,当还剩下5个人的时候那么这5个人就是编程班的班委。
Star很想当班委,为了能够当上班委,他想请你帮忙确定哪些位置是班委的位置。
【输入描述】一行:三个整数k,m和n【输出描述】一行:5个数,分别为5个班委位置的号码(号码从大到小排列)。
两个号码之间用一个空格隔开,最后一个号码没有空格【输入样例】 10 3 2【输出样例】 10 9 8 6 4【解题提示】样例说明:出圈顺序为:3 1 5 2 7 剩下4 6 8 9 10数据规模:10%的数据 k,n,m <= 1540%的数据 k,n,m <= 20060%的数据 k,n,m <= 50090%的数据 k,n,m <= 1000100%的数据 k<=1000 n,m <= 100000【试题来源】常州长训班测试var k,i,h,s,w:integer;t,z,m,n:int64;f:boolean; a:array[1..1000] of 0..1;b:array[1..5] of integer;begin readln(k,m,n); fillchar(a,sizeof(a),1);f:=true; s:=k; w:=0;while s>5 dobegint:=0;if f=true then begin h:=1;z:=m endelse begin h:=-1;z:=n end;while t<z dobeginw:=w+h; if w<=0 then w:=k+w;w:=w mod k;if w=0 then w:=k;t:=t+a[w];end;a[w]:=0;f:=not f;dec(s);end;t:=1;for i:=1 to k doif a[i]<>0 then begin b[t]:=i; inc(t);end;for i:=5 downto 2 do write(b[i],' ');write(b[1]);end.输入20 5 3 输出18 12 9 3 1输入40 9 5 输出31 25 16 2 1宝石手镯[Kolstad/Cox, 2006]贝茜在珠宝店闲逛时,买到了一个中意的手镯。
noip普及组复赛模拟试题7(答案)
【试题描述】给出一个正整数n,然后对n进行一系列处理,处理用以下代码表示:0不做任何处理1对原数加上100,若加上100后大于1000,则再减去1000.2对原数减去100,若减去100后小于0,则再加上2003对原数除2取整4对原数乘4,若乘4之后大于1000,则除以1000取余数。
问题:输入n,k后,将n作为原数(1≤n <1000),k为处理码的十进制表示(1<k ≤30000)。
要求将k化为五进制的数,然后以该五进制数从高位到低位的顺序,分别将每位数字作为处理码对原数按上述规则进行处理,求处理后的结果。
【输入描述】n k (2个整数)【输出描述】处理后的结果【输入样例】33 247【输出样例】28【解题提示】样例说明:k=247 化为五进制数:1442,则处理系列为:133+100=1334133*4=5324 532*4=2128 (除以1000取余数,成为128)2128-100=28所以输出28program ex1764;var n,k,i,t,l:integer;st1,st2:string;beginreadln(n,k);st2:='';repeatt:=k mod 5;str(t,st1);st2:=st1+st2;k:=k div 5;until k=0;l:=length(st2);for i:=1 to l docase st2[i] of'1':begin n:=n+100; if n>1000 then n:=n-1000;end;'2':begin n:=n-100;if n<0 then n:=n+200; end;'3':begin n:=n div 2; end;'4':begin n:=n*4;if n>1000 then n:=n mod 1000;end;end;writeln(n);end.输入56 1249 输出936 输入512 20000 输出612输入1000 30000 输出200Description《贫民窟的百万富翁》获得2009年美国奥斯卡最佳影片,影片的主人公是一个叫贾马尔的小男孩,他在贫民窟长大,后来他参加了一档印度版的《谁想成为百万富翁》电视直播节目,他的特殊成长经历居然使他能够回答这个节目中的每一个问题,最后成功获得百万奖金。
noip普及组复赛模拟试题26(答案)
noip普及组复赛模拟试题26(答案)1.数字反转(revere.cpp/c/pa)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
【输入】输入文件名为revere.in。
输入共1行,一个整数N。
【输出】输出文件名为revere.out。
输出共1行,一个整数,表示反转后的新数。
【输入输出样例1】revere.inrevere.out123321【输入输出样例2】Revere.inrevere.out-380-83【数据范围】-1,000,000,000≤N≤1,000,000,000。
var3,1,2:tring;n,i:integer;beginaign(input,'revere.in');reet(input);aign(output,'revere.out');rewrite(output);read(1);n:=length(1);if1[1]='-'thenbegin2:='-';fori:=1ton-1do1[i]:=1[i+1];delete(1,n,1);end;n:=length(1);fori:=1tondo3:=3+1[n-i+1];i:=1;while(3[i]='0')and(length(3)>1)dodelete(3,1,1);write(2+3);cloe(input);cloe(output);end.2.统计单词数(tat.cpp/c/pa)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。
noip普及组复赛模拟试题16(附答案)
noip普及组复赛模拟试题16(附答案)【问题描述】任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。
你的工作就是判断一个数N是不是Couple number。
【输入文件】仅一行,两个长整型范围内的整数n1和n2,之间用1个空格隔开。
【输入文件】输出在n1到n2范围内有多少个Couple number。
注意:包括n1和n2两个数,且n1<="" <="10" n1="" p=""> 【输入样例】1 10【输出样例】7Couple numbera*a-b*b=n <=> (a+b)(a-b)=n如果n是奇数,则a,b一奇一偶,而n=1*n,所以,令a=(n+1)/2,b=(n-1)/2,即n一定是Couple number。
如果n是偶数,则a,b同奇同偶,此时如果n mod 4=2,则n一定是拆成一奇一偶的和,即x+y和x-y的值一定是一奇一偶,这种情况下x,y肯定无整数解,所以此时的n一定不是Couple number;如果n mod 4=0,则a=n/4+1,b=n/4-1,即n一定是Couple number。
参考程序:var x,y,i,ans:longint;begin assign(input,'couple.in'); reset(input);readln(x,y); close(input);ans:=0;for i:=x to y dobeginif odd(i) then inc(ans)else if i mod 4=0 then inc(ans);end;assign(output,'couple.out');rewrite(output);writeln(ans);close(output);end.10 90(60)5000 12000(5251)100000 200000(75001)对于某个数n,,我们这次的工作仅是求出小于n且和n互质的数的个数,,比如n=10时 1,3,7,9均与10互质//互质的定义是gcd(a,b)=1输入格式 InputFormat输入只有一行,一个数N(1<=N<=2,000,000,000)。
noip复赛普及组试题
CCF 全国信息学奥林匹克联赛(NOIP2015)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,,内存4G,上述时限以此配置为准。
4、只提供 Linux 格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。
1. 金币c/pas)国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 N 天每天收到 N 枚金币后,骑士会在之后的连续 N+1 天里,每天收到 N+1 枚金币。
请计算在前 K 天里,骑士一共获得了多少金币。
【输入格式】输入文件名为。
输入文件只有 1 行,包含一个正整数 K,表示发放金币的天数。
【输出格式】输出文件名为。
输出文件只有 1 行,包含一个正整数,即骑士收到的金币数。
【输入输出样例 1】【输入输出样例 1 说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。
因此一共收到 1+2+2+3+3+3=14 枚金币。
【输入输出样例 2】【数据说明】对于 100%的数据,1 ≤ K ≤ 10,000。
2.扫雷游戏(c/pas)扫雷游戏是一款十分经典的单机小游戏。
在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。
玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。
noip普及组复赛模拟试题34(附答案)
1.近来见习魔法师们在进行一项有关二进制数的研究,研究涉及的一个统计问题令他们大伤脑筋。
问题是这样的:若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
例如:(13)10=(1101)2其中1的个数为3,0的个数为1,则称此数为A类数;(10)10=(1010)2其中1的个数为2,0的个数也为2,称此数为B类数;(24)10=(11000)2其中1的个数为2,0的个数为3,则称此数为B类数;程序要求:求出X~Y之中,全部A、B两类数的个数。
样例输入10 20 输出 5 6Var X,Y,i,j,la,lb:longint;procedure ze(m:longint);var l0,l1:longint;begin l0:=0;l1:=0;while m<>0 dobegin if m mod 2=0 then l0:=l0+1 else l1:=l1+1;m:=m div 2;end;if l1>l0 then j:=1 else j:=0;end;begin la:=0;lb:=0; readln(x,y);for i:=x to y dobegin ze(i); if j=1 then la:=la+1 else if j=0 then lb:=lb+1;end;writeln(la);writeln(lb);end.输入50 100 输出28 23 输入200 400 输出110 91输入1000 2000输出615 386 输入40000 50000 输出4818 5183老师给笑笑布置了一份作业,笑笑不知如何解决。
老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。
【输入文件】:第一行包含一个整数n,表示数列的长度。
(n<=100000)第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。
noip普及组复赛模拟试题27(答案)
输入二个正整数x0,y0(2≤x0≤10000,2≤y0≤100000),求出满足下列条件的P、Q的个数。
条件: 1.P、Q是正整数2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
试求,满足条件的所有可能的两个正整数的个数。
输入输出样例:输入:x0 = 3y0 = 60输出:4说明:(不用输出)此时的 P Q 分别为:3 6015 1212 1560 3所以,满足条件的所有可能的两个正整数的个数共4种。
vari,pq,x0,y0,num,c : longint;function gcd(a,b : longint) : longint;beginwhile b > 0 do beginc := a mod b; a := b; b := c;end;gcd := a;end;beginrepeatwrite('X0 = '); readln(x0);write('Y0 = '); readln(y0);until (x0 >= 2) and (x0 < 10000) and (y0 >= 2) and (y0 < 100000);pq := x0*y0; num := 0;for i := x0 to y0 doif (pq mod i = 0) and (gcd(pq div i,i) = x0) then num := num+1;writeln(num);end.输入2 2 输出1 输入12 986 输出0输入 6 96 输出2 输入10 10000 输出 4在黑板上从1开始写出一组连续的自然数,然后擦去其中的一个数k,其余的数的平均值为a+c/b(繁分式)。
试编写程序求出被擦去的数k。
例如:在黑板上写出1,2,......,69之后把数7擦去而得到的其余的68个数的平均值为35+7/17。
输入一行三个数,分别为a、b、c(a,b,c≤100),用空格分隔。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CCF全国信息学奥林匹克联赛(NOIP2017)复赛普及组(请选手务必仔细阅读本页内容)注意事项: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. 成绩(score.cpp/c/pas)【问题描述】牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%牛牛想知道,这门课程自己最终能得到多少分。
【输入格式】输入文件名为score.in。
输入文件只有1行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。
相邻两个数之间用一个空格隔开,三项成绩满分都是100分。
【输出格式】输出文件名为score.out。
输出文件只有1行,包含一个整数,即牛牛这门课程的总成绩,满分也是100分。
见选手目录下的score/score1.in和score/score1.ans。
【输入输出样例1说明】牛牛的作业成绩是100分,小测成绩是100分,期末考试成绩是80分,总成绩是100×20%+100×30%+80×50%=20+30+40=90。
【输入输出样例2说明】牛牛的作业成绩是60分,小测成绩是90分,期末考试成绩是80分,总成绩是60×20%+90×30%+80×50%=12+27+40=79。
【数据说明】对于30%的数据,A=B=0。
对于另外30%的数据,A=B=100。
对于100%的数据,0≤A、B、C≤100且A、B、C都是10的整数倍。
2. 图书管理员(librarian.cpp/c/pas)【问题描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。
每位借书的读者手中有一个需求码,这个需求码也是一个正整数。
如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。
小D刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出-1。
【输入格式】输入文件名为librarian.in。
输入文件的第一行,包含两个正整数n和q,以一个空格分开,分别代表图书馆里书的数量和读者的数量。
接下来的n行,每行包含一个正整数,代表图书馆里某本书的图书编码。
接下来的q行,每行包含两个正整数,以一个空格分开,第一个正整数代表图书馆里读者的需求码的长度,第二个正整数代表读者的需求码。
【输出格式】输出文件名为librarian.out。
输出文件有q行,每行包含一个整数,如果存在第i个读者所需要的书,则在第i 行输出第i个读者所需要的书中图书编码最小的那本书的图书编码,否则输出-1。
见选手目录下的librarian /librarian1.in和librarian/librarian1.ans。
【输入输出样例1说明】第一位读者需要的书有2123、1123、23,其中23是最小的图书编码。
第二位读者需要的书有2123、1123,其中1123是最小的图书编码。
对于第三位,第四位和第五位读者,没有书的图书编码以他们的需求码结尾,即没有他们需要的书,输出-1。
【输入输出样例2】见选手目录下的librarian/librarian2.in和librarian/librarian2.ans。
【数据规模与约定】对于20%的数据,1 ≤n ≤2。
另有20%的数据,q = 1。
另有20%的数据,所有读者的需求码的长度均为1。
另有20%的数据,所有的图书编码按从小到大的顺序给出。
对于100%的数据,1 ≤n ≤1,000,1 ≤q ≤1,000,所有的图书编码和需求码均不超过10,000,000。
3. 棋盘(chess.cpp/c/pas)【问题描述】有一个m×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。
你现在要从棋盘的最左上角走到棋盘的最右下角。
任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只能向上、下、左、右四个方向前进。
当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1个金币。
另外,你可以花费2个金币施展魔法让下一个无色格子暂时变为你指定的颜色。
但这个魔法不能连续使用,而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法;只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,你才能继续使用这个魔法,而当你离开了这个位置(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。
现在你要从棋盘的最左上角,走到棋盘的最右下角,求花费的最少金币是多少?【输入格式】输入文件名为chess.in。
数据的第一行包含两个正整数m,n,以一个空格分开,分别代表棋盘的大小,棋盘上有颜色的格子的数量。
接下来的n行,每行三个正整数x,y,c,分别表示坐标为(x,y)的格子有颜色c。
其中c=1代表黄色,c=0代表红色。
相邻两个数之间用一个空格隔开。
棋盘左上角的坐标为(1, 1),右下角的坐标为(m, m)。
棋盘上其余的格子都是无色。
保证棋盘的左上角,也就是(1,1)一定是有颜色的。
【输出格式】输出文件名为chess.out。
输出一行,一个整数,表示花费的金币的最小值,如果无法到达,输出-1。
chess/chess1.in chess/chess1.ans【输入输出样例1说明】从(1,1)开始,走到(1,2)不花费金币 从(1,2)向下走到(2,2)花费1枚金币从(2,2)施展魔法,将(2,3)变为黄色,花费2枚金币 从(2,2)走到(2,3)不花费金币 从(2,3)走到(3,3)不花费金币 从(3,3)走到(3,4)花费1枚金币 从(3,4)走到(4,4)花费1枚金币从(4,4)施展魔法,将(4,5)变为黄色,花费2枚金币, 从(4,4)走到(4,5)不花费金币 从(4,5)走到(5,5)花费1枚金币 共花费8枚金币。
【输入输出样例2】 chess/chess2.in chess/chess2.ans从(1,1)走到(1,2),不花费金币从(1,2)走到(2,2),花费1金币施展魔法将(2,3)变为黄色,并从(2,2)走到(2,3)花费2金币从(2,3)走到(3,3)不花费金币从(3,3)只能施展魔法到达(3,2),(2,3),(3,4),(4,3)而从以上四点均无法到达(5,5),故无法到达终点,输出-1【输入输出样例3】见选手目录下的chess/chess3.in和chess/chess3.ans。
【数据规模与约定】对于30%的数据,1 ≤m ≤5,1 ≤n ≤10。
对于60%的数据,1 ≤m ≤20,1 ≤n ≤200。
对于100%的数据,1 ≤m ≤100,1 ≤n ≤1,000。
4. 跳房子(jump.cpp/c/pas)【问题描述】跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。
跳房子的游戏规则如下:在地面上确定一个起点,然后在起点右侧画n个格子,这些格子都在同一条直线上。
每个格子内有一个数字(整数),表示到达这个格子能得到的分数。
玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内。
第二次再从当前位置继续向右跳,依此类推。
规则规定:玩家每次都必须跳到当前位置右侧的一个格子内。
玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。
现在小R研发了一款弹跳机器人来参加这个游戏。
但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的d。
小R希望改进他的机器人,如果他花g个金币改进他的机器人,那么他的机器人灵活性就能增加g,但是需要注意的是,每次弹跳的距离至少为1。
具体而言,当g<d时,他的机器人每次可以选择向右弹跳的距离为d-g, d-g+1, d-g+2,…,d+g-2,d+g-1,d+g;否则(当g≥d时),他的机器人每次可以选择向右弹跳的距离为1,2,3,…,d+g-2,d+g-1,d+g。
现在小R希望获得至少k分,请问他至少要花多少金币来改造他的机器人。
【输入格式】输入文件名为jump.in。
第一行三个正整数n,d,k,分别表示格子的数目,改进前机器人弹跳的固定距离,以及希望至少获得的分数。
相邻两个数之间用一个空格隔开。
接下来n行,每行两个正整数x i,s i,分别表示起点到第i个格子的距离以及第i个格子的分数。
两个数之间用一个空格隔开。
保证x i按递增顺序输入。
【输出格式】输出文件名为jump.out。
共一行,一个整数,表示至少要花多少金币来改造他的机器人。
若无论如何他都无法获得至少k分,输出-1。
【输入输出样例1说明】花费2个金币改进后,小R的机器人依次选择的向右弹跳的距离分别为2,3,5,3,4,3,先后到达的位置分别为2,5,10,13,17,20,对应1, 2, 3, 5, 6, 7这6个格子。
这些格子中的数字之和15即为小R获得的分数。
见选手目录下的jump/jump2.in和jump/jump2.ans。
【输入输出样例2说明】由于样例中7个格子组合的最大可能数字之和只有18 ,无论如何都无法获得20分。
【输入输出样例3】见选手目录下的jump/jump3.in和jump/jump3.ans。
【数据规模与约定】本题共10组测试数据,每组数据10分。
对于全部的数据满足1≤n≤500000,1≤d≤2000,1≤x i,k≤109,|s i|<105。
对于第1,2组测试数据,n≤10;对于第3,4,5组测试数据,n≤500对于第6,7,8组测试数据,d=1。