noip练习题
1.质因数分解
描述
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
格式
输入格式
输入只有一行包含一个正整数n。
输出格式
输出只有一行包含一个正整数p, 即较大的那个质数。
样例1
样例输入1
21
样例输出1
7
限制
1S
提示
【数据范围】对于60%的数据,6 ≤n ≤1000。对于100%的数据,6 ≤n ≤2*10的9次方
问题分析:
如果一个数n是两个素数的乘积,那么其中一个素数必然小于或等于n的开平方。
AC的C++程序如下:
1.#include
2.#include
3.
https://www.360docs.net/doc/293597999.html,ing namespace std;
5.
6.int main()
7.{
8.long n;
9.
10. cin >> n;
11.
12.if(n % 2 == 0)
13. cout << n / 2 << endl;
14.else {
15.int start = sqrt(n) / 2;
16. start = start * 2 + 1;
17.
18.for(int i=start; i>=3; i-=2) {
19.if(n % i == 0) {
20. cout << n / i << endl;
21. }
22. }
23. }
24.
25.return 0;
26.}
2.级数求和
问题分析:简单的求和比较问题。
程序说明:需要注意类型。
描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
格式
输入格式
输入k
输出格式
输出n
样例1
样例输入1
1
样例输出1
2
限制
每个测试点1s
AC的C++程序如下:
1.#include
2.
https://www.360docs.net/doc/293597999.html,ing namespace std;
4.
5.int main()
6.{
7.int k;
8.long n = 0;
9.double sum = 0;
10.
11. cin >> k;
12.while(sum <= k) {
13. n++;
14. sum += 1 / (double) n;
15. }
16.
17. cout << n << endl;
18.
19.return 0;
20.}
3.奖学金
描述
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:
7 279
5 279
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:
5 279
7 279
则按输出错误处理,不能得分。
格式
输入格式
输入包含n+1行:
第l行为一个正整数n,表示该校参加评选的学生人数。
第2到年n+l行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j 行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。
所给的数据都是正确的,不必检验。
输出格式
输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。样例1
样例输入1
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出1
6 265
4 264
3 258
2 244
1 237
样例2
样例输入2
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出2
8 265
2 264
6 264
1 258
5 258
限制
各个测试点1s
提示
50%的数据满足:各学生的总成绩各不相同100%的数据满足:6<=n<=300
问题分析:这是一个排序问题,排序后输出结果。
1.#include
2.#include
3.
https://www.360docs.net/doc/293597999.html,ing namespace std;
5.
6.const int N = 300;
7.const int N2 = 5;
8.
9.struct _student {
10.int no;
11.int yuwen;
12.int total;
13.} s[N];
14.
15.int cmp(const _student &a, const _student &b)
16.{
17.if(a.total != b.total)
18.return a.total > b.total;
19.if(a.yuwen != b.yuwen)
20.return a.yuwen > b.yuwen;
21.else
22.return a.no < b.no;
23.}
24.
25.int main()
26.{
27.int n, a, b;
28.
29. cin >> n;
30.for(int i=0; i 31. cin >> s[i].yuwen >> a >> b; 32. s[i].no = i + 1; 33. s[i].total = s[i].yuwen + a + b; 34. } 35. 36. sort(s, s + n, cmp); 37. 38.for(int i=0; i 39. cout << s[i].no << " " << s[i].total << endl; 40. 41.return 0; 42.} 4.扫雷游戏 描述 扫雷游戏是一款十分经典的单击小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。 玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、左下、右上、右下八个方向上与之直接相邻的格子。 格式 输入格式 第一行用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。 接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符‘’*‘’表示相应的格子是地雷格,字符‘?’表示相应的格子是非地雷格子。相邻字符之间无分隔符。 输出格式 输出文件包括n行,每行m个字符,描述了整个雷区。用‘’*‘’表示地雷格,用周围地雷格数表示非地雷格。相邻字符之间无分隔符。 样例1 样例输入1 3 3 *?? ??? ?*? 样例输出1 *10 221 1*1 样例2 样例输入2 2 3 ?*? *?? 样例输出2 2*1 *21 限制 对于所有的数据,1≤n≤100, 1≤m≤100。 问题分析: 扫雷游戏是人们熟知的一个计算机游戏,通过这个程序,可以了解其局部的计算是如何实现的。 这是一个简单的计算问题,对于一个位置,直接计算其周围的地雷数量即可。定义二维数组用于存储扫雷游戏的棋盘时,周围多出一圈,可以省去数组下标的越界判定。 程序说明: 函数memset()用于给大量的存储空间设置初始值是方便快捷的。 数组around[]存储周围元素的相对下标,使得无序变有序,可以用循环来处理。AC的C++程序如下: #include #include struct _around { int drow; int dcol; } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}}; #define AN 8 #define N 100 char a[N+2][N+2]; int main() { int n, m, i, j, k; memset(a, 0, sizeof(a)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%s",a[i]+1); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ int count=0; if(a[i][j]=='*') printf("%c",a[i][j]); else{ for(k=0;k if(a[i+around[k].drow][j+around[k].dcol]=='*') count++; printf("%d",count); } } printf("\n"); } return 0; } 排名(paiming.pas/c/cpp) [问题描述] 宁波市的小学生们在镇海中学完成程序设计比赛后,老师们批出了所有学生的成 绩,成绩按分数从高到低排名,成绩相同按年级从低到高排(注:纯属虚构,勿对号入座)。现在主办单位想知道每一个排名的学生前,有几位学生的年级低于他(她)。 [输入] 输入文件paiming.in,有若干行: 第1行只有一个正整数n(1<=n<=200),表示参赛的学生人数。 第2行至第n+1行共n行,每行有两个正整数s(0<=s<=400),g(1<=g<=6)。其中第 i+1行的第一个数s表示第i个学生的成绩,第i+1行第二个数g表示第i个学生的的年级。[输出] 输出文件paiming.out有n行,每行只有一个正整数,其中第i行的数k表示排第i名的学生前面有k个学生的排名比他(她)高,且年级比他(她)低。 [样例输入] 5 300 5 200 6 350 4 400 6 250 5 [样例输出] 1 1 3 [数据限制] 50%的数据,每个学生的成绩互不相同 种树(trees.pas) 【问题描述】 一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号成1..N。每个部分为一个单位尺寸大小并最多可种一棵树。每个居民想在门前种些树并指定了三个号码B,E,T。这三个数表示该居民想在B和E之间最少种T棵树。当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。居民们想种树的各自区域可以交叉。你的任务是求出能满足所有要求的最少的树的数量。 写一个程序完成以下工作: * 从trees.in读入数据 一、问题描述: 考虑在0和1之间的所有分母不大于N的最简分数。下面是N = 5时的情况: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 问题求解: 编写一个程序,对于一个给定的整数N(1≤N≤100),按从小到大的顺序打印出这些分数,同时打印出它们的总的个数。 输入输出示例: N = 5 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 TOTAL = 11 二、某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。【输入文件】 输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 【输出文件】 输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。 【样例输入】 500 3 150 300 100 200 470 471 【样例输出】 298 【数据规模】 对于20%的数据,区域之间没有重合的部分; 对于其它的数据,区域之间有重合的情况。 三.代数表达式的定义如下: 代 数 表 达 式: N O I P初赛模拟考试题 及答案解析 集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN] 信息学奥林匹克联赛初赛模拟试题 (普及组C语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,共30分) 1.被誉为“人工智能之父”的是()。 A.冯·诺依曼。 B.巴贝奇。 C.文顿·瑟夫和卡恩。 D.阿兰·图灵。 E.弗雷德里克·特曼。 2.下列哪个不是CPU(中央处理单元)()。 A.IntelItanium B.DDRSDRAM C.AMDAthlon64 D.AMDOpteron E.IBMPower5 3.常见的邮件传输服务器使用()协议发送邮件。 A.HTTP B.SMTP C.TCP D.FTP E. POP3 4.下列无符号数中,最小的数是()。 10 C.(37)8 D.(2A)16 5.下列哪个软件属于操作系统软件()。 A.MicrosoftWord B.Photoshop C.Foxmail D.WinRAR E.RedHatLinux 6.下列哪个不是计算机的存储设备()。 A.文件管理器 B.内存 C.高速缓存 D.硬盘 E.U盘 7.组成’教授’(jiaoshou)’副教授’(fujiaoshou)与’讲师’(jiangshi) 这三个词的汉字,在GB2312-80字符集中都是一级汉字.对这三个词排序的结果是()。 A教授,副教授,讲师B.副教授,教授,讲师 C讲师,副教授,教授D.副教授,讲师,教授 8.彩色显示器所显示的五彩斑斓的色彩,是由红色、蓝色和()色混合而成的。 A.紫 B.白 C.黑 D.绿 E.橙 9.以下哪个软件不是即时通信软件()。 A.网易泡泡 B.MSNMessenger C.GoogleTalk D.3DSMax E.QQ 10.一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行 相互转换的设备,这种设备是()。 A.调制解调器 B.路由器 C.网卡 D.网关 E.交换机 11.计算机病毒传染的必要条件是()。 A.在内存中运行病毒程序 B.对磁盘进行读写操作 C.在内存中运行含有病毒的程序 D.复制文件 NOIP2016普及组复赛模拟赛试卷 普及组 (请选手务必仔细阅读本页内容) 二.提交源程序文件名 三.编译命令(不包含任何优化开关) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。 3、统一评测时采用的机器配置为:CPU P4 3.0GHz,内存 2G,上述时限以此配置为准。 4、特别提醒:评测在Windows下进行,评测软件为cena8.0。 River Hopscotch (jump.pas/c/cpp) 【问题描述】 每年,奶牛们都举办一种特殊的跳房子游戏,在这个游戏中,大家小心翼翼地在河中的岩石上跳。这个游戏在一条笔直的河中进行,以一块岩石表示开始,以另一块距离起点L单位长度的岩石表示结束。在这两块岩石中间还有N 块岩石,每块的位置距离起点是 Di 个单位长度。 玩这个游戏的时候,每头牛从开始的那块岩石想办法要跳到表示结束的那块岩石上。中间只能在从某块岩石跳跃到另一块岩石,反复的这样跳。当然,不够敏捷的牛永远跳不到终点,最终只能落入河中。 农民 John 为他的牛感到自豪,每年都观看比赛。随着时间的推移,他对于那些胆小的只能跳过很短距离的牛感到厌烦。为了那些牛,其他农民会把岩石的间距弄得很小。他计划移除一些岩石,从而增加奶牛在跳跃时需要的最短距离。他不能移除开始和结束的两块岩石。但是除此之外他可以移除 M 块岩石。 FJ 希望知道他能够增加多少最短跳跃距离。求当他移除了M块岩石后,奶牛从开始跳到结束的岩石,每次跳跃的最短距离至多可以增加到多少。 【输入格式】 第1行: 三个用空格分开的整数,分别是 L, N 和 M。 第2..N+1行: 每行一个整数,表示中间N块岩石的位置,没有两块岩石处于同一位置。 【输出格式】 输出共一行一个整数,表示移除某M块岩石后,相邻岩石间距最小值的最大可能情况。 【输入样例】 25 5 2 2 14 11 21 17 【输出样例】 4 【输入说明】中间有 5 块岩石,坐标 2, 11, 14, 17 和 21。开始岩石在0,结束岩石在25。 【输出解释】没有移除任何岩石之前,最少需要跳2个单位长度,从0到2。当移除了位于 2 和 14的两块岩石后, 需要的最短跳跃距离就变成了4。(从 17 到 21 或从 21 到 25)。 【数据规模】 对于30%的数据: 0≤N≤100; 对于50%的数据: 0≤N≤5,000; 对于100%的数据:1≤L≤1,000,000,000;0≤N≤50,000;0 信息学初赛模拟试题(四) 一、选择题:(选出每题正确的答案代码,填在括号里,1—10题为单选题,每小题只有一个正确答案,11—20题为不定项选择题,每小题有一个或一个以上的正确答案,共20题,每题,共30分) 1、二进制数01100100转换成十六进制数是()。 A.32 B.64 C.128 D.100 E.256 2、操作系统是一类重要的系统软件,下面几个软件中,不属于系统软件的是()。A.Java B.MS-DOS C.Linux D.Windows7 E.Unix 3、计算机病毒的传染是以计算机运行和()为基础的,没有这两个条件,病毒是不会传染的。 A.编辑文稿 B.读写磁盘 C.编程序 D.扫描图画 E.打印 4、因特网不属于任何个人,也不属于任何组织。其中在网络知识这一块中有一个英文简写ISP,它的中文意思是()。 A.因特网连接 B.因特网使用 C.因特网设计 D.因特网服务提供者 E.信息传输5、Internet给我们提供了资源共享、浏览、检索信息和远程登录等多种服务,下面几个选项中用于远程登录的是()。 A.WWW B.TCP/IP C.Telnet D.E-mail E.FTP 6、IE是目前流行的浏览器软件,它的工作基础是解释执行用()语言书写的文件。A.VC B.HTML C.BASIC D.HTTP E.VB 7、给出3种排序:插入排序、冒泡排序、选择排序。这3种排序的时间代价分别是()。A.O(n)、O(n2)、O(logn) B.O(logn) 、O(n)、O(n2) C.O(n2)、O(n)、O(logn) D.O(n2)、O(n)、O(n) E.O(n2)、O(n2)、O(n2) 8、一棵完全二叉树的结点总数为18,其叶结点数为()。 A.7个 B.8个 C.9个 D.10个 E.11个 9、在流程图的符号中,菱形框一般作为()。 A.起始框 B.判断框 C.输入输出框 D.处理工作框 E.结速框 10、在解决计算机主机与打印机之间速度不匹配时通常设置一个打印数据缓冲区,主要将要输出打印的数据依次写入该缓冲区,而打印机从该缓冲区中取出数据打印。该缓冲区应该是一个()结构。 A.堆栈 B.数组 C.线性表 D.队列 E.链表 11、多媒体技术中的“多媒体”的含义主要是指如()等多种表达信息的形式。A.磁盘 B.音箱 C.显示器 D.声音 E.图像 12、下面有关计算机知识说明,正确的是()。 A.在WINDOWS98操作系统下,删除磁盘中的文件时都先存放在回收站中 B.FOXMAIL是用于收发电子邮件的工具 C.文件夹组织是一个有层次的树状结构,其中最顶层的是桌面 D.存储器具有记忆能力,其中的信息任何时候都不会丢失 E.为了提高软件的测试效率,应该选择发现错误的可能性大的测试数据 13、对按关键字排序好的线性表进行二分查找,该线性表适合的存储结构为()。A.链接存储 B.索引存储 C.散列存储 D.顺序存储 E.循环存取14、一个栈的输入顺序为1、2、3、4、5,下列序列中可能是栈的输出序列的是()。A.54312 B.24135 C.21543 D.12534 E.12345 15、评价一个算法的好坏有多种指标,下列是算法评价指标的是()。 1.文件名(程序名和输入输出文件名)必须是英文小写。 2.C/C++选手主程序类型必须是int,返回值必须为0。 3.对于C/C++选手本次考试不开任何优化开关。 4.考试前请膜拜yts和tyc大神,以获得人品加成buff。 1. A+B Problem (plus.cpp/c/pas) 【题目描述】 给定两个十六进制的数,求这两个数的和(用十六进制表示)。 【输入格式】 两个十六进制数a和b,用一个空格隔开。十六进制数由包括0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共15个字符组成按照“逢十六进一”的形式进位。【输出格式】 一个十六进制数,表示两个数之和a+b。 【输入输出样例】 input1 9 1 input2 F E input3 ABCDEF 1 output1 A output2 1D output3 ABCDF0 【数据规模与约定】 对于20%的数据,整个运算过程中不出现除十进制数以外的数,且运算过程无进位;对于50%的数据,1<=length(a)<=100,1<=length(b)<=100; 对于100%的数据,1<=length(a)<=10^4,1<=length(b)<=10^4。 2. 十字炸弹 (bomb.cpp/c/pas) 【题目描述】 你是QDEZ神秘组织中的一名特工。在一次行动任务中,你需要摧毁一间房间中的一些重要目标。 你获得了这个房间的地图:这是一个n*m大小的矩形房间,里面各处分散分布着许多目标。你的攻击武器是一个特殊的十字炸弹——这个炸弹可以在引爆时摧毁在炸弹所在行以及在炸弹所在列的所有目标。例如你在(3,4)点安置了这个十字炸弹,引爆时它就可以同时炸毁位于(3,5)、(3,7)、(5,4)等这些点的目标,却对位于(4,5)这样的点的目标毫无作用。 为了行动更加迅捷,不被敌人发现,组织只给了你一个如上所述的十字炸弹。这个炸弹可以被安放在空地上或是目标上。而你,要用这一个十字炸弹,摧毁掉整个房间里所有的目标。在哪个位置安放才能炸毁所有的目标呢?这就要你来决定了。 【输入格式】 第一行是两个正整数n和m,表示该房间的长和宽。 从第二行开始一直到第n+1行,每行m个字符,表示一个矩阵,这个矩阵即为房间的地图。每一个字符有两种可能——“#”表示该位置是需要摧毁的目标,“.”表示此位置是空地。 【输出格式】 第一行是一个字符串,如果存在某个位置安放炸弹后可以摧毁所有目标则输出“YES”(全部为大写,不带引号),否则输出“NO”。 如果存在某个位置可以摧毁所有目标,在第二行输出两个正整数x和y,表示可以在(x,y)点放置炸弹。如果有多个位置都可以,输出字典序最小的一组(输出x最小的一组,如果有多组解的x相等,则输出其中y最小的)。 【输入输出样例】 input1 3 4 .#.. .... .#.. input2 3 3 ..# .#. #.. output1 YES 1 2 output2 NO NOIP模拟试题三 普及组复赛 题目名称手机数字积木家族书本整理 程序名称mobile.pas/c/cpp brick.pas/c/cpp famdy.pas/c/cpp book.pas/c/cpp 输入文件mobile.in brick.in family.in book.in 输出文件mobile.out brick.out family.out book.out 时间限制1秒1秒1秒1秒 一、手机(mobile.pas/c/cpp) 【问题描述】 一般的手机的键盘是这样的: 12abc3def 4ghi5jkl6mno 7pqrs8tuv9wxyz *0# 要按出英文字母就必须要按数字键多下。例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。0键按一下会出一个空格。 你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。 【问题输入】 一行一个句子,只包含英文小写字母和空格,且不超过200个字符。 【问题输出】 一行一个整数,表示按键盘的总次数。 【样例输入】 i have a dream 【样例输出】 23 【数据范围】 如题目所示 二、数字积木(brick.pas/c/cpp) 【问题描述】 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢? 你的任务就是读入n个数字积木,求出所能形成的最大数。 【问题输入】 第一行是一个整数n(n≤1000),接下来n行每行是一个正整数。 【问题输出】 所能形成的最大整数 【样例输入】 3 13 131 343 【样例输出】 34313131 【数据范围】 30%的数据,n≤l0,每个数<103。50%的数据,n≤l00。100%的数据,n≤1000,每个数<10200。 三、家族(family.pas/c/cpp) 【问题描述】 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏。现在给你岛上的地图,求出岛上有多少个不同的家族。岛上的地图有n行,每行有若干列,每个格子中要么是“”,表示大海,要么是“*”,表示河流或山丘,要么是小写字母,表示一户人家的姓氏。 【问题输入】 第一行是个数字N,表示下面信息的行数。接下来是N行字符,每行由小写字母和*号组成,有些行的最前面也可能包含若干连续的空格,表示这些区域是大海,每一行最多不超过200个字符。 【问题输出】 一个数字,表示家族数。 【样例输入】 4 *zlw**pxh l*zlwk*hx* w*tyy**yyy zzl 【样例输出】 3 【数据范围】 10%的数据,n≤1。30%的数据,n≤10。100%的数据,n≤100每一行最多不超过200个字符。 四、书本整理(book.pas/c/cpp) 【问题描述】 小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱。小明把这个凌乱值定义为相邻两本书的宽度差的绝对值的和。 例如有4本书: 1×2 5×3 2×4 全国信息学奥林匹克联赛(NOIP2011)复赛 提高组 模拟模拟试题试题试题(二试) (二试)(请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称密码子翻译苹果二叉树青蛙王子的口令 英文题目与子目录名cell apple order 可执行文件名cell apple order 输入文件cell.in apple.in order.in 输出文件cell.out apple.out order.out 每个测试点时限1秒1秒1秒测试点数目101010每个测试点分值101010附加样例文件有有 有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类型 传统 传统 传统二.提交源程序文件名 三.运行内存限制 对于pascal 语言cell.pas apple.pas order.pas 对于C 语言cell.c apple.c order.c 对于C++语言 cell.cpp apple.cpp order.cpp 内存上限 128M 128M 128M 1.密码子翻译 (cell cell.pas/c/cpp) .pas/c/cpp)【问题描述】 DNA 是一切细胞生物的遗传物质。它能指导蛋白质的合成,从而控制细胞的新陈代谢和生物的性状。 中心法则(genetic central dogma )是所有有细胞结构的生物所遵循的法则,它的主要内容是遗传信息从DNA 传递给mRNA ,再从mRNA 传递给蛋白质的转录和翻译的过程(如图)。 mRNA 是由许多核糖核苷酸组成的链状分子,但这些核糖核苷酸不外乎4种:腺嘌呤核糖核苷酸(A ),鸟嘌呤核糖核苷酸(G ),胞嘧啶核糖核苷酸(C )和尿嘧啶核糖核苷酸(U )。mRNA 上三个相邻的核糖核苷酸序列叫做密码子,一个密码子可以翻译成一个氨基酸,且密码子不重叠。已知:一条mRNA 只能翻译成若干种氨基酸,并且知道决定这些氨基酸的密码子。给出一条mRNA 的核糖核苷酸序列,请你计算出它最多能翻译成多少氨基酸。【输入】 输入文件名为cell.in 。 第一行,一个长度为l 的字符串,表示核糖核苷酸序列。 接下来若干行,每行一个密码子,只有这些密码子能够翻译成氨基酸。相同的密码子不重复出现。 输入数据仅由A 、G 、C 、U 四个大写字母组成。【输出】 输出文件名为cell.out 。 只有一个正整数N ,表示给出的核糖核苷酸序列组成的mRNA 最多能翻译成氨基酸的数目。 【输入输出样例1】【输入输出样例 1说明】 在核糖核苷酸序列ACACGAUC 中标出密码子:ACACGAUC 这样最多只能选取CAC 、 AUC 两个密码子翻译,即输出2。 cell cell.in .in cell.out ACACGAUC CAC AUC CGA 2 第二十三届全国青少年信息学奥林匹克联赛初赛 提高组 PASCAL语言模拟试题 竞赛时间:2017年 10 月 14 日 14:30~16:30 选手注意: ●试题纸共有 13 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写 在试题纸上的一律无效。 ●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个 正确选项) 1.1956年()授予肖克利(William Shockley)、巴丁(John Bardeen) 和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发 现。 A. 诺贝尔物理学奖 B. 约翰·冯·诺依曼奖 C. 图灵奖 D. 高德纳奖(Donald E. Knuth Prize) 2.如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照 CapsLock、 字母键 A、字母键 S 和字母键 D 的顺序来回按键,即 CapsLock、A、S、D、S、 A、CapsLock、A、S、D、S、A、CapsLock、A、S、D、S、A、……,屏幕上输 出的第 81 个字符是字母()。 A. A B. S C. D D. A 3.二进制数 00101100 和 01010101 异或的结果是()。 A. 00101000 B. 01111001 C. 01000100 D. 00111000 4.与二进制小数 0.1 相等的八进进制数是()。 A. 0.8 B. 0.4 C. 0.2 D. 0.1 5.以比较作为基本运算,在 N 个数中找最小数的最少运算次数为()。 A. N B. N-1 C. N2 D. log N 6.表达式 a*(b+c)-d 的后缀表达形式为()。 A. abcd*+- B. abc+*d- C. abc*+d- D. -+*abcd 7.一棵二叉树如右图所示,若采用二叉树链表存储该二叉 树(各个结点包括结点的数据、左孩子指针、右孩子指 针)。如果没有左孩子或者右孩子,则对应的为空指针。 那么该链表中空指针的数目为()。 A. 6 B. 7 C. 12 D. 14 8.G 是一个非连通简单无向图,共有 28 条边,则该图至少有()个顶点。 A 六边形(hexagons.pas/c/cpp) TL:1S ML:256MB 【Description】 有一个由小正六边形拼成的大六边形,对边的长度是相同的(形状如图) (图中所示的是a=2,b=3,c=4的情况) 现在给出a, b, c,求构成六边形的小正六边形的数量 【Input】 一行三个整数a,b,c 【Output】 一个整数表示答案 【Sample Input】 2 3 4 【Sample Output】 18 【Hint】 2 <= a, b, c <= 1000 B 统计(count.pas/c/cpp) TL:1S ML:128MB 【Description】 求:所有的N位数中,有多少数各位数字的乘积是恰好K。请注意,这里的N位数是可以有前导零的。比如01,02视为二位数,但是他们各位数字的乘积都是0。 【Input】 一行两个整数N,K 【Output】 一个行一个整数表示结果。 【Sample Input】 2 3 【Sample Output】 2 【Sample Input】 2 0 【Sample Output】 19 【Hint】 样例解释1:13、31。 样例解释2:00, 01, 02 .., 09,10, 20,..90 对于20%:N <= 6。 对于50%:N<=16 存在另外30%:K=0。 对于100%:N <= 50,0 <= K <= 10^9。 C 幻方(magicsquare.pas/c/cpp) TL:1S ML:128MB 【Description】 给定N*N个数,把它们填入N*N的方格中,使每行每列和两个斜对角线里数的和都相等。【Input】 第一行一个正整数N 第二行N*N个整数,代表要填入幻方中的数 【Output】 N行每行N个整数,用空格隔开,代表填好的幻方。 如果有多组解,输出任意一组即可。 保证有解。 【Sample Input1】 3 9 9 9 9 9 9 9 9 9 【Sample Output1】 9 9 9 9 9 9 9 9 9 【Sample Input2】 3 1 2 3 4 5 6 7 8 9 【Sample Output2】 NOIP2011模拟赛题解 最大公约数 首先可以排除所有GCD(a,b)不等于1的数对 因为他们同除以公约数后可以得到一样优的解 其次可以排除在辗转过程中出现a<=b div2的情况如果b mod a=c可以将b变成a+c可以得到一样优的解并且原来的b变小 则可以将所有没被排除掉的数表示成如下形式 a,b->b-a,a->….->1,x(经过L次) 对于所有的1,x明显x=2得到的序列更优 所以只考虑这个序列 1,2->2,3->3,5->5,8->8,13…. 即由Fibonacci数列前后两项所构成的序列 做法: 用高精度计算fib数列知道列尾数字大于n 输出倒数第二和倒数第三项即可 序列游戏 如果我们枚举Gy,Nsk翻转的位置,然后再进行计算,显然是O(N^3)的。这个做法通过记录区间和能够非常容易的做到O(N^2),但如果要通过所有的测试数据还有一定困难。因此我们接下来对这题作一些研究。 显然的,假如Gy的决策已经确定了,Nsk的决策是确定的。我们猜想这之中有一定的单调性,但是显然Nsk的决策和Gy的决策构不成单调关系。 事实上,要处理原问题,我们只需要解决下面的两个子问题即可。 1.Gy和Nsk的选择集合严格不相交。 2.Gy和Nsk的选择集合存在相交部分。 这两个子问题都是可以做的。我们先来考虑第一个子问题。如果Gy和Nsk的选择集合严格不相交的话怎么处理。显然这个问题可以通过记录后缀最小值单调处理,时间复杂度O(N)。 如果Gy和Nsk的选择集合存在相交部分,假设Gy当前决策是i,Nsk相对的最优决策是j(j<=i),我们记这样的决策为(i,j)。 显然Nsk的最优决策不会在[0,j-1],因为这与(i,j)为Nsk在i处的最优决策相矛盾。同理最优决策不会在[j+1,i]。因此,当Gy的决策由i变成i+1时,实际上Nsk下一步只有两种决策的可能 1.Nsk的决策仍为j; 2.Nsk的决策变为i+1。 我们只要求出这两种决策的最优值并记录下来即可,可以在O(N) 喜羊羊运动会——撑杆跳高 【试题描述】 运动会马上就要开始了,撑杆跳高场地上,羊村的N(3 <= N <= 100)个村民正排成一队有秩序地练习。“好高啊,我都不知道自己能不能跳过去”,懒羊羊慢条斯理地说道。“这么高,不知道最少要几只羊叠在一起才会够得着”,沸羊羊向来比较喜欢思考数学问题,这样说道。 试编一程序,计算出最少要几只羊叠在一起(一头羊踩在另一头羊的背上)才能够得着横杆(所谓够得着,指羊的身高总和不小于横竿的高度B)。如果N头羊叠在一起,都够不着横竿,则输出“Impossible” 【输入描述】 第一行:两个整数N(3 <= N <= 100)和B,表示队伍中羊的总数以及横竿的高度。 第二行:空格隔开的N个整数,表示每只羊的身高Hi(1 <= Hi <= 10000)。 【输出描述】一行,一个整数,表示最少要几头羊才能够到横竿。如果N 只羊叠在一起都够不着则输出“Impossible”。 【输入样例】 样例1: 5 23 6 8 1 3 9 样例2: 6 16 1 2 3 1 3 5 【输出样例】noip2013 模拟试题
noip普及组编程模拟试题1
NOIP初赛模拟考试题及答案解析修订版
NOIP竞赛模拟试题
NOIP信息学初赛模拟试题C
CCF全国信息学奥林匹克联赛(NOIP2016)模拟赛
NOIP模拟试题三
NOIP模拟试题
NOIP2017提高组初赛模拟题
NOIP模拟试题
杭州学军中学NOIP2011模拟赛DAY2-2011-10-5题解
2014noip复赛模拟练习10(答案)