noip练习题

noip练习题
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;

}

noip2013 模拟试题

排名(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读入数据

noip普及组编程模拟试题1

一、问题描述: 考虑在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%的数据,区域之间没有重合的部分; 对于其它的数据,区域之间有重合的情况。 三.代数表达式的定义如下: 代 数 表 达 式:

NOIP初赛模拟考试题及答案解析修订版

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.复制文件

NOIP竞赛模拟试题

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

NOIP信息学初赛模拟试题C

信息学初赛模拟试题(四) 一、选择题:(选出每题正确的答案代码,填在括号里,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、评价一个算法的好坏有多种指标,下列是算法评价指标的是()。

CCF全国信息学奥林匹克联赛(NOIP2016)模拟赛

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模拟试题三

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

NOIP模拟试题

全国信息学奥林匹克联赛(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

NOIP2017提高组初赛模拟题

第二十三届全国青少年信息学奥林匹克联赛初赛 提高组 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 条边,则该图至少有()个顶点。

NOIP模拟试题

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模拟赛DAY2-2011-10-5题解

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)

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

喜羊羊运动会——撑杆跳高 【试题描述】 运动会马上就要开始了,撑杆跳高场地上,羊村的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 【输出样例】

样例1:3 样例2:Impossible 【试题来源】武进区夏令营程序设计小能手PK program ex1797; var n,i,j,t,sum:integer; b,s:real; a:array[1..100] of integer; begin readln(n,b); for i:=1 to n do read(a[i]); for i:=1 to n-1 do for j:=i+1 to n do if a[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 【样例输出】 81 2.面积(area.cpp ) 【问题描述】 编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如右下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。在输入中,为了方便起见使用“1”来代替右图中的“*”。 【输入格式(area.in )】 输入数据保证仅有一个10*10的01矩阵 【输出格式(area.out )】 一个数,表示面积 【样例输入】

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 【样例输出】 15 3. 极值问题(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的值最大。例如,从键盘输入k=1995,则输出:m=987 n=1597。 【输入格式(number.in)】 一个整数k 【输出格式(number.out)】 共两行,分别为“m=….”和“n=….” 【输入样例】 1995 【输出样例】 m=987 n=1597 4、牛的旅行(fun.cpp) 【问题描述】 农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区不连通。现在,John想在农场里添加一条路径( 注意,恰好一条)。对这条路径有这样的限制:一个牧场的直径就是牧场中最远的两个牧区的距离( 本题中所提到的所有距离指的都是最短的距离)。考虑如下的两个牧场,图1是有5个牧区的牧场, 牧区用“*”表示,路径用直线表示。每一 个牧区都有自己的坐标: 图1所示的牧场的直径大约是12.07106, 最远的两个牧区是A和E,它们之间的最 短路径是A-B-E。这两个牧场都在John的

杭州学军中学NOIP2011模拟赛DAY2-2011-10-5

NOIP2011模拟赛 By 杭州学军中学中文题目名称最大公约数序列游戏纪念品题目名gcd.pas/c/cpp game.pas/c/cpp senzo.pas/c/cpp 时间限制1s 1s 1s 空间限制256M 256M 256M 编译命令:(以题目名A为例) 对于pascal语言:fpc A.pas 对于C语言:gcc -o A A.c -lm 对于C++语言:g++ -o A A.cpp -lm 代码长度限制:50KB 请根据实际评测的机器配置适当放大或缩小时间和空间限制 为了评测及整理方便起见,文件夹名请使用"学校名-选手名"的格式,里面不需要使用子文件夹,谢谢合作。 出题人:Gy , Chnlich , Nsk

最大公约数 题目描述 刚刚上完小学四年级的Gy和Nsk在讨论有关用辗转相除法求最大公约数的问题。他们想知道,对于求GCD(a,b) (a<=b<=N),辗转最多的一对是哪一对。 辗转次数的定义:对于数对A,B(A<=B),令A'=B mod A,B'=A,每次将(A,B)变为(A',B'),直到最终A'=gcd(A,B)时总共进行的变换次数。 辗转次数的具体解释: 比如在N=10时 4,6 -> 2,4 ==> 2 GCD(4,6)是2 辗转了1次 3,8 -> 2,3 -> 1,2 ==> 1 GCD(3,8)是1 辗转了2次 2,9 -> 1,2 ==> 1 GCD(2,9)是1 辗转了1次

所以(3,8)比(2,9)和(4,6)辗转的多。 输入格式 一行,包含一个整数N,含义如题所述。 输出格式 两行各一个整数,分别表示辗转次数最多的数对的a和b。 如果辗转次数一样,取b最小的(如果b也一样,取a最小的)。 样例输入 4 样例输出 2 3 数据范围 对于20% 的数据N<=10^4 对于50% 的数据N<=10^18 对于100% 的数据3<=N<=10^12000

noip模拟赛题目

模拟赛 时间:3个小时难度:NOIp提高组 题目总览 子串清除 clear.pas/c/cpp 【问题描述】 我们定义字符串A是字符串B的子串当且仅当我们能在B串中找到A串。现在给你一个字符串A,和另外一个字符串B,要你每次从B串中从左至右找第一个A串,并从B串中删除它,直到A串不为B串的子串,问你需要进行几次删除操作。 【输入格式】 输入文件共2行,第一行一个字符串A(长度小于256),第二行一个字符串B。 【输出格式】 输出文件只有一个整数N。 【数据范围】 30%的数据是随机生成的; 50%的数据满足输入文件大小小于300KB; 100%的数据满足输入文件小于500KB,字符串A、B中只会出现英文字母。 【样例输入】 abc abcabcabaabcbccc 【样例输出】 5 【样例说明】 abcabcabaabcbccc-> abcabaabcbccc-> abaabcbccc-> ababccc-> abcc

民主选举 vote.pas/c/cpp [问题描述] 众所周之,sub有好多好多小弟.具体来说,有n个小弟.那么谁是最强的小弟呢?sub决定投票决定. 准确地说,sub选定了m个投票者.他决定搞n-1轮投票,每轮投票都淘汰他的一个小弟..当然了,每轮被淘汰的那个小弟一定是当轮得票数最少的那个. 这m个投票者对每个小弟都会有一个喜爱程度,他们会根据这个程度来决定票投给谁.第一轮他们一定会投票给他们最喜欢的那个小弟,之后的每一轮,他们都会投票给还没被淘汰的他们最喜欢的小弟. 对于每一轮来说,假如有两个小弟得票数并列倒数第一,那么编号大的小弟会被淘汰(因为小弟们的编号是根据sub对他们的喜爱程度编号的...). 现在sub想知道,在第1,2,3...n-1轮分别被淘汰的,以及最终胜出的分别是哪个小弟? [输入描述] 第一行两个数n,m(n,m<=1000)分别表示小弟的个数和投票者的个数. 接下来是一个m行n列的矩阵,第i行第j列表示投票者i的第j喜欢的小弟是谁. [输出描述] n行,每行一个编号表示在该轮中被淘汰的小弟的编号.(我们假设最后胜出的小弟在第n轮被sub淘汰了...) [样例输入] 4 4 2 1 3 4 1 3 2 4 2 3 4 1 1 2 4 3 [样例输出] 4 3 2 1 [运行时间]

NOIP2010模拟试题

NOIP2010 模拟试题 故事背景: 话说小FF在经历了上次“寻找古代王族遗产”的探险后,成为了世界上最伟大的探险家并拥有了一大笔财富。当然他不能坐吃山空,必须创造财富!!于是他买下了传说中的Greed Island并优先发展那里的采矿业……他还将其称为Greed Island的“NewBe_One”计划。 试题一: 新的开始 【题目描述】 发展采矿业当然首先得有矿井,小FF花了上次探险获得的千分之一的财富请人在岛上挖了n口矿井,但他似乎忘记考虑的矿井供电问题…… 为了保证电力的供应,小FF想到了两种办法: 1、在这一口矿井上建立一个发电站,费用为v(发电站的输出功率可以供给任意多个矿井)。 2、将这口矿井与另外的已经有电力供应的矿井之间建立电网,费用为p。 小FF希望身为”NewBe_One" 计划首席工程师的你帮他想出一个保证所有矿井电力供应的最小花费。 【输入格式】 第一行一个整数n,表示矿井总数。 第2~n+1行,每行一个整数,第i个数v[i]表示在第i口矿井上建立发电站的费用。 接下来为一个n*n的矩阵P,其中p[ i , j ]表示在第i口矿井和第j口矿井之间建立电网的费用(数据保证有p[ i, j ] = p[ j, i ], 且p[ i, i ]=0)。 【输出格式】 仅一个整数,表示让所有矿井获得充足电能的最小花费。 【输入样例】 4 5 4 4 3 0 2 2 2 2 0 3 3 2 3 0 4 2 3 4 0 【输出样例】 9 输出样例说明: 小FF可以选择在4号矿井建立发电站然后把所有矿井都与其建立电网,总花费是3+2+2+2 = 9。 【数据范围】 对于30%的数据:1<=n<=50; 对于100%的数据:1<=n<=300; 0<=v[i], p[i,j] <=10^5.

noip备战模拟题(有解答)

吉祥数 c/cpp) 【问题描述】 为了迎接圣诞,信息学兴趣小组的同学在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:猜数。老师给每位同学发一张卡片,每张卡片上都有一个编号(此编号为非负数,且小于255),每个编号互不相同。老师制定了以下的游戏规则:第一轮,每位同学将自己卡片上编号的各位数字进行平方后再相加得到一组新数,编号在这组新数中出现的同学淘汰出局,第二轮,余下的同学再将编号的各位数字进行立方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,第三轮,余下的同学再将编号的各位数字进行4次方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,……,以此类推,经过n 轮后,仍留下来的同学,将获得圣诞特别礼物,卡片上的数即为2007年吉祥数。(假定班级人数不超过200人) 【输入文件】() 第1行为1个正整数n(n<8),表示有n轮游戏,第二行是卡片上互不相同的编号。 【输出文件】() 为剩下来的各个吉祥数,按从小到大顺序输出,每两个数之间有一个空格。 【输入样例】 1 24 123 2 12 20 14 4 6 36 72 【输出样例】 2 6 12 24 72 123 圣诞树 c/cpp) 【问题描述】 圣诞特别礼物挂在一棵圣诞树上,这棵树有n层,每层有一件礼物,每件礼物都有一个价值,有的礼物还有一些连结线,与下层的礼物相连,领取礼物的规则如下:任选一件礼物,它的下面如果有连结线,则可以继续取它连结的礼物,以此类推,直至取到没有连结线的礼物才结束,你如果是第一个去取,怎样取才能获得最大的价值呢请你编一程序解决这一问题。【输入文件】() 第一行只有一个数据n(n<=100),表示有n层礼物,以下有n行数据,分别表示第1-n层礼物的状态,每行至少由一个数据构成,且第一个数据表示该礼物的价值,后面的数据表示它与哪些层的礼物相连,如果每行只有一个数据则说明这层礼物没有与下层礼物相连,每个数的大小均不超过10000。

noip模拟题

计算(a+b)*c的值 Time Limit:1000MS Memory Limit: 128MB abc.cpp/c/pas Description 给定3个整数a、b、c,计算表达式(a+b)*c的值。 Input 输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。 (-10,000 < a,b,c < 10,000) Output 输出一行,即表达式的值 Sample Input 2 3 5 Sample Output 25 Hint

最高的分数 Time Limit:1000MS Memory Limit: 128MB high.cpp/c/pas Description 孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗? Input 输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。Output 输出一个整数,即最高的成绩。 Sample Input 5 85 78 90 99 60 Sample Output 99 Hint

Nim游戏 Time Limit:1000MS Memory Limit: 128MB nim.cpp/c/pas Description 有N(1<=N<=100)堆石子,每堆个数给定A1..AN(1<=Ai<=2,147,483,647)请注意数据类型的选择,现有甲乙两人轮流取石子,由甲开始,每次选一堆,取走任意数目石子,不能不取。不能取者负,求甲是否获胜。假定每人都采取最优策略。 Input 多组nim.in 第一行:一个数T,组数 每组第一行:一个数N。 以下N行:每堆石子数Ai Output nim.out 对于每组输入,输出结果。输出Win 或是Lose Sample Input 2 2 3 3 3 2 4 6 Sample Output Lose Lose Hint

相关文档
最新文档