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普及组复赛模拟试题10答案
【试题描述】选拔考试即将开始,同学们陆续进入考场,哇,考场好大啊。
究竟star应该坐在哪张位置呢?考场门口贴了一张考场座位(m*n)明细表,其中考场里的有些位置是坏的不能坐,考号为1的同学的座位号是第一排第一列,即他的座位是1、1,2号同学的座位是1、2,以此类推,当然,如果某个座位是坏的,那么这个同学就往后延一个座位,后面的同学再依次排下去。
考场座位肯定够所有考生坐。
【输入描述】第1行:3个整数,m,n,k(m,n表示考场的座位是m行n列,k表示star的考号)m,n<=100;第2..m+1行:每行n个数代表考场明细0代表座位是好的,1代表座位是坏的)【输出描述】一行:两个整数代表star应该坐的位置【输入样例】4 4 50 0 0 00 0 1 00 0 0 10 0 0 0【输出样例】2 1【试题来源】常州长训班测试program ex1661;var k,i,j,s,m,n:integer;a:array[1..100,1..100] of 0..1;beginreadln(m,n,k);for i:=1 to m dofor j:=1 to n doread(a[i,j]);s:=0;for i:=1 to m dofor j:=1 to n dobeginif a[i,j]<>1 then inc(s);if s=k then begin writeln(i,' ',j); exit;end;end;end.输入 6 6 70 0 0 0 1 00 0 1 0 0 00 0 0 1 1 00 0 0 0 0 11 0 0 0 0 00 0 1 0 0 1 输出 2 2输入8 6 100 0 0 0 1 00 0 1 0 0 00 0 0 1 1 00 0 0 0 0 11 0 0 0 0 00 0 1 0 0 10 1 0 0 0 01 0 0 0 0 1输出 2 6【题目描述】一个农夫有n(n≤1000)头奶牛,可由于产奶太少,他决定把当天产奶最少的牛杀掉,但他有点舍不得,如果当天不只一头奶牛产奶,至少他便放过它们。
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第十三届天下青少年信息学奥林匹克联赛复赛试题普及组
全国信息学奥林匹克联赛(NOIP2007 )复赛普及组全国信息学奥林匹克联赛(NOIP 2007)复赛普及组题目一览题目名称奖学金纪念品分组守望者的逃离Hanoi 双塔问题代号scholar group escape hanoi 输入文件输出文件时限 1 秒 1 秒 1 秒 1 秒(2007 年 11 月 17 日 3 小时达成 )说明:1.文件名(程序名和输入输出文件名)一定使用小写2. C/C++ 中函数 main() 的返回值种类一定是int ,程序正常结束时的返回值一定是0。
3. 全国一致评测时采纳的机器参照配置为:CPU 2.0GHz ,内存 256M 。
1.奖学金(scholar.pas/c/cpp)【问题描绘】某小学近来获取了一笔资助,打算取出此中一部分为学习成绩优异的前 5 名学生发奖学金。
期末,每个学生都有 3 门课的成绩:语文、数学、英语。
先按总分从高到低排序,假如两个同学总分同样,再按语文成绩从高到低排序,假如两个同学总分和语文成绩都同样,那么规定学号小的同学排在前方,这样,每个学生的排序是独一确立的。
任务:先依据输入的 3 门课的成绩计算总分,而后按上述规则排序,最后按排名次序输出前5 名学生的学号和总分。
注意,在前 5 名同学中,每一个人的奖学金都不同样,所以,你一定严格按上述规则排序。
比如,在某个正确答案中,假如前两行的输出数据(每行输出两个数:学号、总分)是:7 2795 279这两行数据的含义是:总分最高的两个同学的学号挨次是7 号、 5 号。
这两名同学的总分都是 279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7 的学生语文成绩更高一些。
假如你的前两名的输出数据是:5 2797 279则按输犯错误办理,不可以得分。
【输入】输入文件包含n+1行:第 1 行为一个正整数n,表示该校参加评比的学生人数。
第 2 到 n+1 行,每行有 3 个用空格分开的数字,每个数字都在0 到 100 之间。
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普及组复赛试题
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普及组复赛答案
noip普及组复赛答案【篇一:noip普及组复赛入门测试(答案+测试数据)】class=txt>新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间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*tu*(t-k) then writeln(1);if v*tu*(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米高度自由下落,落地后反弹起,又落地,又弹起,??。
每次弹起的高度都是上一次高度的一半。
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普及组复赛模拟试题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普及组复赛模拟试题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普及组复赛模拟试题11答案
机器人深海探测是一个极富挑战性的高技术科学研究项目。
小雪参加了这一项目的研究工作。
潜水机器人可以携带规定有限的能量。
在深海探测过程中,机器人需要消耗一定的能量,但可以在机器人之间通过接触传递能量。
用多个潜水机器人接力潜水可以极大地提高潜水机器人的潜水深度。
现给定2个潜水机器人。
第1个潜水机器人最多可以携带x1单位的能量,每下潜1米需要消耗能量y1单位。
第2个潜水机器人最多可以携带x2单位的能量,每下潜1米需要消耗能量y2单位。
开始时2个潜水机器人均处于同一海平面高度为0,并且每个机器人初始时都携带了规定最多的能量。
计算用这2个机器人进行不返回的接力深海探测可下潜的最大深度。
输入:每行一个整数,依次为x1,x2,y1,y2;输出: 这2个登山机器人可下潜的最大深度,精确到小数点后2位。
例如输入:50500.010.01输出:7500.00var x1,x2,y1,y2,x,y,s:real;beginreadln(x1); readln(x2); readln(y1); readln(y2);s:=0;if (x1/y1)>(x2/y2) thenbeginx:=x1;y:=y1;endelse beginx:=x2;y:=y2;end;repeatx1:=x1-y1;x2:=x2-y2;s:=s+1;until x1+x2<=x;s:=s+x/y;writeln(s:0:2);readln;end.输入:40 0.02↙50 0.01↙输出:6334.00输入25350.150.25输出254.671233211.55.1输出131.002035年,智能机器人在各行各业中的应用已经十分普遍了,毕竟它做事时的精度与力量比一个普通人是强多了。
王涛的运输队里就有一个,是用来装卸货物的。
这天,他们的任务是要把N(2 <= N <= 50 )根废旧的条形钢材运送到钢铁厂重新冶炼。
这些钢材长短不同(有些还特别的长),为了便于运输,只好把它们切割成小段。
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)。
NOIP复赛普及组试题————————————————————————————————作者:————————————————————————————————日期:CCF全国信息学奥林匹克联赛(NOIP2013)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况中文题目名称计数问题表达式求值小朋友的数字车站分级英文题目与子目录名count expr number level可执行文件名count expr number level输入文件名count.in expr.in number.in level.in 输出文count.out expr.out n umber.out level.out件名每个测试点时限1 秒 1 秒 1 秒 1 秒测试点数目10 10 10 10每个测试点分值10 10 10 10附加样例文件有有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统运行内存上限128M 128M 128M 128M二.提交源程序文件名对于C++语言count.cpp expr.cpp number.cpp level.cpp对于C 语言count.c expr.c number.c level.c对于pascal语言count.pas expr.pas number.pas level.pas 三.编译命令(不包含任何优化开关)对于C++语言g++ -ocountcount.cpp-lmg++ -oexprexpr.cpp–lmg++ -onumbernumber.cpp-lmg++ -olevellevel.cpp-lm对于C 语言gcc -ocountgcc -oexprgcc-onumbergcc -olevelcount.c -lm expr.c-lmnumber.c-lmlevel.c-lm对于pascal 语言fpccount.pasfpcexpr.pasfpcnumber.pasfpclevel.pas注意事项: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 下进行。
1.记数问题(count.cpp/c/pas)【问题描述】试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在1 到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。
【输入】输入文件名为count.in。
输入共1 行,包含2 个整数n、x,之间用一个空格隔开。
【输出】输出文件名为count.out。
输出共1 行,包含一个整数,表示x 出现的次数。
【输入输出样例】count.in count.out11 1 4【数据说明】对于100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
2.表达式求值(expr.cpp/c/pas)【问题描述】给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
【输入】输入文件为expr.in。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0 到231-1 之间的整数。
输入数据保证这一行只有0~ 9、+、*这12 种字符。
【输出】输出文件名为expr.out。
输出只有一行,包含一个整数,表示这个表达式的值。
注意:当答案长度多于4 位时,请只输出最后4 位,前导0 不输出。
【输入输出样例1】expr.in expr.out1+1*3+4 8【输入输出样例2】expr.in expr.out1+1234567890*1 7891【输入输出样例3】expr.in expr.out1+1000000003*1 4【输入输出样例说明】样例1 计算的结果为8,直接输出8。
样例2 计算的结果为1234567891,输出后4 位,即7891。
样例3 计算的结果为1000000004,输出后4 位,即4。
【数据范围】对于30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;对于80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
3.小朋友的数字(number.cpp/c/pas)【问题描述】有n 个小朋友排成一列。
每个小朋友手上都有一个数字,这个数字可正可负。
规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。
作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值。
请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对p 取模后输出。
【输入】输入文件为number.in。
第一行包含两个正整数n、p,之间用一个空格隔开。
第二行包含n 个数,每两个整数之间用一个空格隔开,表示每个小朋友手上的数字。
【输出】输出文件名为number.out。
输出只有一行,包含一个整数,表示最大分数对p 取模的结果。
【输入输出样例1】number.in number.out215 9971 2 3 4 5【输入输出样例说明】小朋友的特征值分别为1、3、6、10、15,分数分别为1、2、5、11、21,最大值21 对997的模是21。
【输入输出样例2】number.in number.out-15 7-1 -1 -1 -1 -1【输入输出样例说明】小朋友的特征值分别为-1、-1、-1、-1、-1,分数分别为-1、-2、-2、-2、-2,最大值-1对7的模为-1,输出-1。
【数据范围】对于50%的数据,1 ≤ n ≤ 1,000,1 ≤ p ≤ 1,000所有数字的绝对值不超过1000;对于100%的数据,1 ≤ n ≤ 1,000,000,1 ≤ p ≤ 109,其他数字的绝对值均不超过109。
4.车站分级(level.cpp/c/pas)【问题描述】一条单向的铁路线上,依次有编号为1, 2, …, n 的n 个火车站。
每个火车站都有一个级别,最低为1 级。
现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站x,则始发站、终点站之间所有级别大于等于火车站x 的都必须停靠。
(注意:起始站和终点站自然也算作事先已知需要停靠的站点)例如,下表是5 趟车次的运行情况。
其中,前4 趟车次均满足要求,而第5 趟车次由于停靠了3 号火车站(2 级)却未停靠途经的6 号火车站(亦为2 级)而不满足要求。
1 2 3 4 5 6 7 8 9 车站编号车站级别3 1 2 1 3 2 1 1 3 车次1 始→→→停→→→停→终2 始→→→停→终3 始→→→→→→→停→→→→→→→终4 始→停→停→停→停→终5 始→→→停→→→→→→→终现有m 趟车次的运行情况(全部满足要求),试推算这n 个火车站至少分为几个不同的级别。
【输入】输入文件为level.in。
第一行包含2 个正整数n, m,用一个空格隔开。
第i + 1 行(1 ≤ i≤ m)中,首先是一个正整数s i(2 ≤ s i≤ n),表示第i 趟车次有s i 个停靠站;接下来有s i 个正整数,表示所有停靠站的编号,从小到大排列。
每两个数之间用一个空格隔开。
输入保证所有的车次都满足要求。
【输出】输出文件为level.out。
输出只有一行,包含一个正整数,即n 个火车站最少划分的级别数。
【输入输出样例】level.in level.out9 224 1 35 63 3 5 69 33 4 1 3 5 63 3 5 63 1 5 9【数据范围】对于20%的数据,1 ≤ n, m ≤ 10;对于50%的数据,1 ≤ n, m ≤ 100;对于100%的数据,1 ≤ n, m ≤ 1000。