CSP-J复赛复习题目(NOIP普及组2000-2011)

CSP-J复赛复习题目(NOIP普及组2000-2011)

NOIP普及组复赛(某个不存在的比赛)2000-2011年的题面和样例
可以用来复习CSP-J
建议去OJ上查看并提交

祝大家CSP RP++

文章目录

  • CSP-J复赛复习题目(NOIP普及组2000-2011)
  • 【00NOIP普及组】计算器的改良(noip001.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【00NOIP普及组】税收与补贴问题(noip002.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【00NOIP普及组】乘积最大(noip003.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【00NOIP普及组】单词接龙(noip004.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
  • 【01NOIP普及组】数的记数(count.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
  • 【01NOIP普及组】最大公约数与最小公倍数(gygb.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
  • 【01NOIP普及组】求先序排列(nlr.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【01NOIP普及组】装箱问题(pack.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【02NOIP普及组】级数求和(p1.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【02NOIP普及组】选数(p2.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【02NOIP普及组】产生数(p3.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【02NOIP普及组】过河卒(p4.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【03NOIP普及组】乒乓球(table.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【03NOIP普及组】数字游戏(game.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【03NOIP普及组】栈(stack.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【03NOIP普及组】麦森数(mason.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【04NOIP普及组】不高兴的津津(unhappy.pas/dpr/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【04NOIP普及组】花生采摘(peanuts.pas/dpr/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【样例输入2】
    • 【样例输出2】
  • 【04NOIP普及组】FBI树(fbi.pas/dpr/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
    • 【数据规模】
  • 【04NOIP普及组】火星人(martian.pas/dpr/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【数据规模】
  • 【05NOIP普及组】陶陶摘苹果(apple.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】5
  • 【05NOIP普及组】校门外的树(tree.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】298
    • 【数据规模】
  • 【05NOIP普及组】采药(medic.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【数据规模】
  • 【05NOIP普及组】循环(circle.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【数据规模】
  • 【06NOIP普及组】明明的随机数(random.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【06NOIP普及组】开心的金明(happy.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【06NOIP普及组】Jam的计数法(count.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【06NOIP普及组】数列(sequence.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【07NOIP普及组】奖学金(scholar.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例2】
    • 【输出】
    • 【限制】
  • 【07NOIP普及组】纪念品分组(group.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【限制】
  • 【07NOIP普及组】守望者的逃离(escape.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入样例2】
    • [输出]
    • 【限制】 30%的数据满足:1<=T<=10,1<=S<=100
  • 【07NOIP普及组】Hanoi双塔问题(hanoi.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【输入输出样例2】
    • 【输出】
    • 【限制】
    • 【提示】
  • 【08NOIP普及组】ISBN号码(isbn.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出洋例2】
    • 【输出】
  • 【08NOIP普及组】排座椅(seat.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
    • 【输入输出样例解释】
  • 【08NOIP普及组】传球游戏(ball.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
  • 【08NOIP普及组】立体图(drawing.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
  • 【09NOIP普及组】多项式输出(poly.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例2】
    • 【输出】
    • 【数据范围】
  • 【09NOIP普及组】分数线划定(score.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】【样例说明】
  • 【09NOIP普及组】细胞分裂(cell.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例1 说明】
    • 【输入输出样例 2】
    • 【输出】
    • 【输入输出样例2 说明】
    • 【数据范围】
  • 【09NOIP普及组】道路游戏(game.pas/c/cpp)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】【数据范围】
  • 【10NOIP普及组】数字统计(two.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例2】
    • 【输出】
    • 【数据范围】
  • 【10NOIP普及组】接水问题(water.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例说明】
    • 【输入输出样例2】
    • 【输出】
    • 【数据范围】
  • 【10NOIP普及组】导弹拦截(missile.pas)
    • 【题目描述】
    • 【输入】
    • 【提示】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】# 【样例 1 说明】
    • 【输入输出样例2】
    • 【输出】
    • 【样例2 说明】
    • 【数据范围】
  • 【10NOIP普及组】三国游戏(sanguo.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例说明】
    • 【输入输出样例2】
    • 【数据范围】
  • 【11NOIP普及组】数字反转(reverse.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例 2】
    • 【数据范围】
  • 【11NOIP普及组】统计单词数(stat.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【输入输出样例 1 说明】
    • 【提示】# 【输入输出样例 2】
    • 【输入输出样例 2 说明】
    • 【数据范围】
  • 【11NOIP普及组】瑞士轮(swiss.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】1
    • 【提示】# 【输入输出样例说明】
    • 【数据范围】
  • 【11NOIP普及组】表达式的值(exp.pas)
    • 【题目描述】
    • 【输入】
    • 【输出】
    • 【输入样例】
    • 【输出样例】
    • 【提示】
    • 【输入输出样例说明】
    • 【数据范围】

【00NOIP普及组】计算器的改良(noip001.pas)

【题目描述】

NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:
4+3x=8
6a-5+1=2-2a
-5+12Y=0
ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母 及十、一、=这三个数学符号(当然,符号“一”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

【输入】

输入一个一元一次方程,可认为输入的一元一次方程均为合法的,且有唯一实数解。

【输出】

将解方程的结果(精确至小数点后三位)输出。

【输入样例】

6a-5+1=2-2a

【输出样例】

a=0.750

【00NOIP普及组】税收与补贴问题(noip002.pas)

【题目描述】

每样商品的价格越低,其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定数值递减。(我们假设价格及销售量都是整数)
对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以税收或补贴的方式来控制。(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)
问题求解:
你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各 种价位上的销售情况。要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。
总利润=单位商品利润*销量
单位商品利润=单位商品价格-单位商品成本(-税金 or +补贴)

【输入】

输入的第一行为政府对某种商品的预期价,第二行有两个整数,第一个整数为商品成本, 第二个整数为以成本价销售时的销售量,以下若干行每行都有两个整数,第一个为某价位时 的单价,第二个为此时的销量,以一行-1,-1表示所有已知价位及对应的销量输入完毕,输入的最后一行为一个单独的整数表示在已知的最高单价外每升高一块钱将减少的销量。

【输出】

输出有两种情况:若在政府预期价上能得到最大总利润,则输出一个单独的整数,数的正负表示是补贴还是收税,数的大小表示补贴或收税的金额最小值。若有多解,取绝对值最小的输出。如在政府预期价上不能得到最大总利润,则输出“NO SOLUTION”

【输入样例】

31
28 130
30 120
31 110
-1 -1
15

【输出样例】

4

【00NOIP普及组】乘积最大(noip003.pas)

【题目描述】

今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先 生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活 动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样 一道题目:
设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:
有一个数字串: 312,当N=3,K=1时会有以下两种分法:
1)312=36
2)31
2=62
这时,符合题目要求的结果是: 31*2=62
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。

【输入】

输入共有两行:
第一行共有2个自然数N,K (6<=N<=40,1<=K<=6)
第二行是一个K度为N的数字串。

【输出】

所求得的最大乘积(一个自然数)。

【输入样例】

4 2
1231

【输出样例】

62

【00NOIP普及组】单词接龙(noip004.pas)

【题目描述】

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。

【输入】

输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输 入的最后一行为一个单个字符,表来“龙”开头的字母。你可以假定以此字母开头的“龙" 一定存在。

【输出】

只需输出以此字母开头的最长的“龙”的长度

【输入样例】

5
at
touch
cheat
choose
tact
a

【输出样例】

23

【提示】

样例连成的“龙”为atoucheatactactouchoose

【01NOIP普及组】数的记数(count.pas)

【题目描述】

我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止。

【输入】

输入n

【输出】

数的个数

【输入样例】

6

【输出样例】

6

【提示】

样例说明: 这6个数是: 6、16 、26、126 、36 、136

【01NOIP普及组】最大公约数与最小公倍数(gygb.pas)

【题目描述】

二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求满足下列条件的P,Q的个数。
条件:
1.P,Q是正整数;
2.要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:满足条件的所有可能的两个正整数的个数。

【输入】

输入x0和y0

【输出】

满足条件的所有可能的两个正整数的个数

【输入样例】

3 60

【输出样例】

4

【提示】

样例说明:此时的P Q分别为:
3 60
15 12
12 15
60 3

【01NOIP普及组】求先序排列(nlr.pas)

【题目描述】

给出一棵二叉树的中序与后序排序。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。

【输入】

一行,一棵二叉树的中序与后序排序,中间用一个空格隔开。

【输出】

它的先序排列

【输入样例】

BADC BDCA

【输出样例】

ABCD

【01NOIP普及组】装箱问题(pack.pas)

【题目描述】

有一个箱子容量为V(正整数,0≤V≤20000),同时有n个物品(0≤n≤30),每个物品有一个体积(正整数)。要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

【输入】

第一行是箱子的容量,第二行是n(表示n有n个物品),接下来n行是n个物品的体积。

【输出】

最小空间

【输入样例】

24
6
8
3
12
7
9
7

【输出样例】

0

【02NOIP普及组】级数求和(p1.pas)

【题目描述】

已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个数K,当n.足够大的时候,Sn大于K。 现给出一个整数K(1≤K≤15),要求计算出一个最小的n,使得Sn>K

【输入】

一行,一个整数K

【输出】

一行,一个整数n

【输入样例】

1

【输出样例】

2

【02NOIP普及组】选数(p2.pas)

【题目描述】

已知n个整数x1,x2,……xn,以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别 得到一系列的和。例如当n=4, k =3, 4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:
3+7+12=22   3+7+19=29   7+12+19=38  3+12+19=34
现在,要求你计算出和为素数共有多少种。
例如上例,只有一种的和为素数:(3+7+19=29)。

【输入】

第一行为n和k (1≤n≤20, k<n)
第二行为n个数
x1 x2 ……xn(1≤xi≤5000000),各数之间用一个空格隔开)

【输出】

一个整数(满足条件的种数)。

【输入样例】

4 3
3 7 12 19

【输出样例】

1

【02NOIP普及组】产生数(p3.pas)

【题目描述】

给出一个整数n(n<10^30)和k个变换规则(k<=15)。
规则: 1位数可变换成另一个一位数;
规则的右部不能为零。 例如: n=234, 有规则(k=2):
2→5
3→6
上面的整数234经过变换后可能产生出的整数为(包括原数):
234
534
264
564
共4种不同的产生数
问题: 给出一个整数n和k个规则。
求出: 经过任意次的变换(0次或多次),能产生出多少个不同整数。
仅要求输出个数。

【输入】

第一行为n和k,后面k行为交换规则,即每行两个数

【输出】

一个整数(满足条件的个数)。

【输入样例】

234 2
2 5
3 6

【输出样例】

4

【02NOIP普及组】过河卒(p4.pas)

【题目描述】

如图,A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。

同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为方马的控制点。例如上图C点上的马可以控制9个点(图中的P1,P2…P8和C)。卒不能通过对方的控制点。
棋盘用坐标表示,A点(0,0)、B点(n, m)(n,m为不超过20的整数,并由键盘输入),同样马 的位置坐标是需要给出的(约定:C≠A,同时C≠B)。现在要求你计算出卒从A点能够到达B点的路径的条数。

【输入】

B点的坐标(n,m)以及对方马的坐标(X,Y) {不用判错}

【输出】

一个整数(路径的条数)。

【输入样例】

6 6 3 2

【输出样例】

17

【03NOIP普及组】乒乓球(table.pas)

【题目描述】

国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

【输入】

每个输入包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

【输出】

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

【输入样例】

WWWWWWWWWWWWWWWWWWWW
WWLWE

【输出样例】

11:0
11:0
1:1

21:0
2:1

【03NOIP普及组】数字游戏(game.pas)

【题目描述】

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。
例如,对于下面这圈数字(n=4,m=2):

当要求最小值时,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值时,为((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特别值得注意的是,无论是负数还是正数,对10取模的结果均为非负值。
丁丁请你编写程序帮他赢得这个游戏。

【输入】

第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。

【输出】

有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。

【输入样例】

4 2
4
3
-1
2

【输出样例】

7
81

【03NOIP普及组】栈(stack.pas)

【题目描述】

栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。
栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。
栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。

宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n。
现在可以进行两种操作,
1.将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的push操作)
2. 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的pop操作)
使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由1 2 3生成序列2 3 1的过程。(原始状态如上图所示)

你的程序将对给定的n,计算并输出由操作数序列1,2,…,n经过操作可能得到的输出序列的总数。

【输入】

只含一个整数n(1≤n≤18)

【输出】

只有一行,即可能输出序列的总数目

【输入样例】

3

【输出样例】

5

【03NOIP普及组】麦森数(mason.pas)

【题目描述】

形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)

【输入】

只包含一个整数P(1000<P<3100000)

【输出】

第一行:十进制高精度数2P-1的位数。
第2-11行:十进制高精度数2P-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
不必验证2P-1与P是否为素数。

【输入样例】

1279

【输出样例】

386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087

【04NOIP普及组】不高兴的津津(unhappy.pas/dpr/c/cpp)

【题目描述】

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入】

包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出】

一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

【输入样例】

5 3
6 2
7 2
5 3
5 4
0 4
0 6

【输出样例】

3

【04NOIP普及组】花生采摘(peanuts.pas/dpr/c/cpp)

【题目描述】

鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”

我们假定多多在每个单位时间内,可以做下列四件事情中的一件:
1)从路边跳到最靠近路边(即第一行)的某棵花生植株;
2)从一棵植株跳到前后左右与之相邻的另一棵植株;
3)采摘一棵植株下的花生;
4)从最靠近路边(即第一行)的某棵花生植株跳回路边。
现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。
例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。

【输入】

第一行包括三个整数,M, N和K,用空格隔开;表示花生田的大小为M * N(1 <= M, N <= 20),多多采花生的限定时间为K(0 <= K <= 1000)个单位时间。接下来的M行,每行包括N个非负整数,也用空格隔开;第i + 1行的第j个整数Pij(0 <= Pij <= 500)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。

【输出】

一行,这一行只包含一个整数,即在限定时间内,多多最多可以采到花生的个数。

【输入样例】

6 7 21
0 0 0 0 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 0 7
0 15 0 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 0 0 0

【输出样例】

37

【样例输入2】

6 7 20
0 0 0 0 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 0 7
0 15 0 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 0 0 0

【样例输出2】

28

【04NOIP普及组】FBI树(fbi.pas/dpr/c/cpp)

【题目描述】

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树1 ,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1)T的根结点为R,其类型与串S的类型相同;
2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历
2序列。

【输入】

第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。

【输出】

一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

【输入样例】

3
10001011

【输出样例】

IBFBBBFIBFIIIFF

【提示】

【数据规模】

对于40%的数据,N<=2;
对于全部的数据,N<=10。
*1二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。
*2后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

【04NOIP普及组】火星人(martian.pas/dpr/c/cpp)

【题目描述】

人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。
火星人用一种非常简单的方式来表示数字——掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。
一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。下表展示了只有3根手指时能够形成的6个3位数和它们代表的数字:

现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围。

【输入】

三行,第一行有一个正整数N,表示火星人手指的数目(1 <= N <= 10000)。第二行是一个正整数M,表示要加上去的小整数(1 <= M <= 100)。下一行是1到N这N个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。

【输出】

只有一行,这一行含有N个整数,表示改变后的火星人手指的排列顺序。每两个相邻的数中间用一个空格分开,不能有多余的空格。

【输入样例】

5
3
1 2 3 4 5

【输出样例】

1 2 4 5 3

【数据规模】

对于30%的数据,N<=15;
对于60%的数据,N<=50;
对于全部的数据,N<=10000。

【05NOIP普及组】陶陶摘苹果(apple.pas/c/cpp)

【题目描述】

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

【输入】

两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出】

一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【输入样例】

100 200 150 140 129 134 167 198 200 111
110

【输出样例】5

【05NOIP普及组】校门外的树(tree.pas/c/cpp)

【题目描述】

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

【输入】

第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

【输出】

一行,这一行只包含一个整数,表示马路上剩余的树的数目。

【输入样例】

500 3
150 300
100 200
470 471

【输出样例】298

【数据规模】

对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。

【05NOIP普及组】采药(medic.pas/c/cpp)

【题目描述】

辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?

【输入】

第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

【输出】

一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

【输入样例】

70 3
71 100
69 1
1 2

【输出样例】

3

【数据规模】

对于30%的数据,M <= 10;
对于全部的数据,M <= 100。

【05NOIP普及组】循环(circle.pas/c/cpp)

【题目描述】

乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。
众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,4,8,6……我们说2的正整数次幂最后一位的循环长度是4(实际上4的倍数都可以说是循环长度,但我们只考虑最小的循环长度)。类似的,其余的数字的正整数次幂最后一位数也有类似的循环现象:

这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数n的正整数次幂来说,它的后k位是否会发生循环?如果循环的话,循环长度是多少呢?
注意:
1. 如果n的某个正整数次幂的位数不足k,那么不足的高位看做是0。
2. 如果循环长度是L,那么说明对于任意的正整数a,n的a次幂和a + L次幂的最后k位都相同。

【输入】

有一行,包含两个整数n(1 <= n < 10100)和k(1 <= k <= 100),n和k之间用一个空格隔开,表示要求n的正整数次幂的最后k位的循环长度。

【输出】

一行,这一行只包含一个整数,表示循环长度。如果循环不存在,输出-1。

【输入样例】

32 2

【输出样例】

4

【数据规模】

对于30%的数据,k <= 4;
对于全部的数据,k <= 100。

【06NOIP普及组】明明的随机数(random.pas)

【题目描述】

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

【输入】

有2行,第1行为1个正整数,表示所生成的随机数的个数:N
第2行有N个用空格隔开的正整数,为所产生的随机数。

【输出】

2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

【输入样例】

10
20 40 32 67 40 20 89 300 400 15

【输出样例】

8
15 20 32 40 67 89 300 400

【06NOIP普及组】开心的金明(happy.pas)

【题目描述】

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为:
v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]w[jk]。(其中为乘号)
请你帮助金明设计一个满足要求的购物单。

【输入】

第1行,为两个正整数,用一个空格隔开:N和m(其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。)
从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有2个非负整数v和p(其中v表示该物品的价格(v<=10000),p表示该物品的重要度(1~5))

【输出】

只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。

【输入样例】

1000 5
800 2
400 5
300 5
400 3
200 2

【输出样例】

3900

【06NOIP普及组】Jam的计数法(count.pas)

【题目描述】

Jam是个喜欢标新立异的科学怪人。他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩。在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母。我们把这样的“数字”称为Jam数字。在Jam数字中,每个字母互不相同,而且从左到右是严格递增的。每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母。如果再规定位数为5,那么,紧接在Jam数字“bdfij”之后的数字应该是“bdghi”。(如果我们用U、V依次表示Jam数字“bdfij”与“bdghi”,则U<V,且不存在Jam数字P,使U<P<V)。你的任务是:对于从文件读入的一个Jam数字,按顺序输出紧接在后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。

【输入】

有2行,第1行为3个正整数,用一个空格隔开:
s t w (其中s为所使用的最小的字母的序号,t为所使用的最大的字母的序号。w为数字的位数,这3个数满足:1≤s第2行为具有w个小写字母的字符串,为一个符合要求的Jam数字。
所给的数据都是正确的,不必验证。

【输出】

最多为5行,为紧接在输入的Jam数字后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。每行只输出一个Jam数字,是由w个小写字母组成的字符串,不要有多余的空格。

【输入样例】

2 10 5
bdfij

【输出样例】

bdghi
bdghj
bdgij
bdhij
befgh

【06NOIP普及组】数列(sequence.pas)

【题目描述】

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。

【输入】

只有1行,为2个正整数,用一个空格隔开:k N(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000。

【输出】

一个正整数(在所有的测试数据中,结果均不超过2.1*109)。(整数前不要有空格和其他符号)。

【输入样例】

3 100

【输出样例】

981

【07NOIP普及组】奖学金(scholar.pas/c/cpp)

【题目描述】

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:
7 279
5 279
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:
5 279
7 279
则按输出错误处理,不能得分。

【输入】

第1行为一个正整数n,表示该校参加评选的学生人数。
第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。
所给的数据都是正确的,不必检验。

【输出】

共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。

【输入样例】

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

【输出样例】

6 265
4 264
3 258
2 244
1 237

【输入输出样例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

【输出】

8 265
2 264
6 264
1 258
5 258

【限制】

50%的数据满足:各学生的总成绩各不相同100%的数据满足: 6<=n<=300

【07NOIP普及组】纪念品分组(group.pas/c/cpp)

【题目描述】

元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

【输入】

含n+2行:
第1行包括一个整数w,为每组纪念品价格之和的上限;
第2行为一个整数n,表示购来的纪念品的总件数;
第3-n+2行每行包含一个正整数Pi(5<=Pi<=w),表示所对应纪念品的价格。

【输出】

仅一行,包含一个整数,即最少的分组数目。

【输入样例】

100
9
90
20
20
30
50
60
70
80
90

【输出样例】

6

【限制】

50%的数据满足: 1<=n<=15
100%的数据满足: 1<=n<=30000,80<=W<=200

【07NOIP普及组】守望者的逃离(escape.pas/c/cpp)

【题目描述】

恶魔猎手尤迪安野心勃勃.他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,岛上的所有人都会遇难。守望者的跑步速度,为17m/s, 以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。
现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位。且每次活动的持续时间为整数秒。距离的单位为米(m)。

【输入】

仅一行,包括空格隔开的三个非负整数M,S,T。

【输出】

包含两行:
第1行为字符串"Yes"或"No" (区分大小写),即守望者是否能逃离荒岛。
第2行包含一个整数,第一行为"Yes" (区分大小写)时表示守望着逃离荒岛的最短时间;
第一行为"No" (区分大小写) 时表示守望者能走的最远距离。

【输入样例】

39 200 4

【输出样例】

No
197

【输入样例2】

36 255 10

[输出]

Yes
6

【限制】 30%的数据满足:1<=T<=10,1<=S<=100

50%的数据满足:1<=T<=1000,1<=S<=10000
100%的数据满足:1<=T<=300000,0<=M<=1000,1<=S<=108

【07NOIP普及组】Hanoi双塔问题(hanoi.pas/c/cpp)

【题目描述】

给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2) A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

【输入】

一个正整数n,表示在A柱上放有2n个圆盘。

【输出】

仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An。

【输入样例】

1

【输出样例】

2

【输入输出样例2】

2

【输出】

6

【限制】

对于50%的数据, 1<=n<=25
对于100% 数据, 1<=n<=200

【提示】

设法建立An与An-1的递推关系式。

【08NOIP普及组】ISBN号码(isbn.pas)

【题目描述】

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语音,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符之后的五位数字代表该书在该出版社的编号;最后一位为识别码。
识别吗的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN码0-670-82162-4中的识别码4是这样得到的:对0670082162这9个数字,从左至右,分别乘以1,2,…9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码/
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码.

【输入】

只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码.的格式要求)。

【输出】

一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

【输入样例】

0-670-82162-4

【输出样例】

Right

【输入输出洋例2】

0-670-82162-0

【输出】

0-670-82162-4

【08NOIP普及组】排座椅(seat.pas)

【题目描述】

上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。

【输入】

第一行,有5个用空格隔开的证书,分别是M,N,K,L,D(2<﹦N,M<﹦1000,0<﹦K<M,0<﹦L<N,D<﹦2000)。接下来D行,每行有4个用空格隔开的整数。第i行的4个证书Xi,Yi,Pi,Oi,表示坐在位置(Xi,Yi)与(Pi,Oi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优秀方案的唯一性。

【输出】

共两行,第一行包含K个整数,a1,a2……ak,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai<ai+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1 b2……bL,表示第b1列和b1+1列之间,第b2列和b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi<bi+1,每两个整数之间用空格隔开(行尾没有空格)。

【输入样例】

4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4

【输出样例】

2
2 4

【提示】

【输入输出样例解释】

上图中用符号*、※,+标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。

【08NOIP普及组】传球游戏(ball.pas)

【题目描述】

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次后,又回到小蛮手里。两种传球被视作不同的方法,当且仅当这两种方法中,接到球的同学按照顺序组成的序列是不同的。比如3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共两种。

【输入】

共一行,有两个空格隔开的整数n,m(3<=n<=30, 3<=m<=30)。

【输出】

共一行,有一个整数,表示符合题意的方法数。

【输入样例】

3 3

【输出样例】

2

【提示】

40%的数据满足:3<=n<=30,1<=m<=20
100%的数据满足:3<=n<=30,1<=m<=30

【08NOIP普及组】立体图(drawing.pas)

【题目描述】

小渊是个聪明的孩子,他经常会给周围的小朋友讲些自己认为有趣的内容。最近,他准备给小朋友讲解立体图,请你帮他画出立体图。
小渊有一块面积为mn的矩形区域,上面有mn个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以一种形式摆放。

每个顶点用1个加号’+‘表示,长用3个"-“表示,宽用1个”/“表示,高用两个”|"表示。符号’+’,’-’,’/’,’|‘的ASCII码分别是43,45,47,124。字符’.’(ASCII码46)需要作为背景输出,即立体图中的空白部分需要用’.'来代替。立体图的画法如下面的规则:
若两块积木左右相邻,图示为:

若两块积木上下相邻,图示为:

若两块积木前后相邻,图示为:

立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面的自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

【输入】

第一行有用空格隔开的2个整数m和n,表示有mn个格子(1<=m,n<=50)。接下来的m行,是一个mn的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的格子上摞有多少个积木(1<=每个格子上的积木数<=100)。

【输出】

包含题目要求的立体图,是一个K行L列的字符矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。

【输入样例】

3 4
2 2 1 2
2 2 1 1
3 2 1 2

【输出样例】

【09NOIP普及组】多项式输出(poly.pas/c/cpp)

【题目描述】

一元 n 次多项式可用如下的表达式表示:

其中,aixi 称为i次项,ai称为i次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

  1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。
  2. 多项式中只包含系数不为0 的项。
  3. 如果多项式n 次项系数为正,则多项式开头不出现“+”号,如果多项式n 次项系数为负,则多项式以“-”号开头。
  4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。如果x 的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b 为x 的指数;如果x 的指数为1,则接下来紧跟的指数部分形式为“x”;
    如果x 的指数为0,则仅需输出系数即可。
  5. 多项式中,多项式的开头、结尾不含多余的空格。

【输入】

共有2 行
第一行 1 个整数,n,表示一元多项式的次数。
第二行有 n+1 个整数,其中第i 个整数表示第n-i+1 次项的系数,每两个整数之间用空格隔开。

【输出】

共1 行,按题目所述格式输出多项式。

【输入样例】

5
100 -1 1 -3 0 10

【输出样例】

100x5-x4+x3-3x2+10

【输入输出样例2】

3
-50 0 0 1

【输出】

-50x^3+1

【数据范围】

1 ≤ n ≤ 100,多项式各次项系数的绝对值均不超过100。

【09NOIP普及组】分数线划定(score.pas/c/cpp)

【题目描述】

世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

【输入】

第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各不相同。

【输出】

第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。
从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

【输入样例】

6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88

【输出样例】

88 5
1005 95
2390 95
1000 90
1001 88
3239 88

【提示】【样例说明】

m150% = 3150% = 4.5,向下取整后为4。保证4 个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5 个人进入面试。

【09NOIP普及组】细胞分裂(cell.pas/c/cpp)

【题目描述】

Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家。现在,他正在为一个细胞实验做准备工作:培养细胞样本。
Hanks 博士手里现在有N 种细胞,编号从1~N,一个第i 种细胞经过1 秒钟可以分裂为Si 个同种细胞(Si 为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养。一段时间以后,再把培养皿中的所有细胞平均分入M 个试管,形成M 份样本,用于实验。Hanks 博士的试管数M 很大,普通的计算机的基本数据类型无法存储这样大的M 值,但万幸的是,M 总可以表示为m1 的m2 次方,即M =m1m2 ,其中m1,m2 均为基本数据类型可以存储的正整数。
注意,整个实验过程中不允许分割单个细胞,比如某个时刻若培养皿中有4 个细胞,Hanks 博士可以把它们分入2 个试管,每试管内2个,然后开始实验。但如果培养皿中有5个细胞,博士就无法将它们均分入2个试管。此时,博士就只能等待一段时间,让细胞们继续分裂,使得其个数可以均分,或是干脆改换另一种细胞培养。
为了能让实验尽早开始,Hanks 博士在选定一种细胞开始培养后,总是在得到的细胞“刚好可以平均分入M 个试管”时停止细胞培养并开始实验。现在博士希望知道,选择哪种细胞培养,可以使得实验的开始时间最早。

【输入】

共有三行。
第一行有一个正整数 N,代表细胞种数。
第二行有两个正整数 m1,m2,以一个空格隔开, m1m2即表示试管的总数M。
第三行有 N 个正整数,第i 个数Si 表示第i 种细胞经过1 秒钟可以分裂成同种细胞的个数。

【输出】

共一行,为一个整数,表示从开始培养细胞到实验能够开始所经过的最少时间(单位为秒)。
如果无论 Hanks 博士选择哪种细胞都不能满足要求,则输出整数-1。

【输入样例】

1
2 1
3

【输出样例】

-1

【输入输出样例1 说明】

经过1秒钟,细胞分裂成3个,经过2 秒钟,细胞分裂成9个,……,可以看出无论怎么分裂,细胞的个数都是奇数,因此永远不能分入2 个试管。

【输入输出样例 2】

2
24 1
30 12

【输出】

2

【输入输出样例2 说明】

第 1 种细胞最早在3 秒后才能均分入24 个试管,而第2 种最早在2 秒后就可以均分(每试管144/(241)=6 个)。故实验最早可以在2 秒后开始。

【数据范围】

对于 50%的数据,有m1m2≤ 30000。
对于所有的数据,有1 ≤N≤ 10000,1 ≤m1 ≤ 30000,1 ≤m2 ≤ 10000,1 ≤ Si ≤ 2,000,000,000。

【09NOIP普及组】道路游戏(game.pas/c/cpp)

【题目描述】

小新正在玩一个简单的电脑游戏。
游戏中有一条环形马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这n 个机器人工厂编号为1~n,因为马路是环形的,所以第n 个机器人工厂和第1 个机器人工厂是由一段马路连接在一起的。小新将连接机器人工厂的这n 段马路也编号为1~n,并规定第i 段马路连接第i 个机器人工厂和第i+1 个机器人工厂(1 ≤ i ≤ n-1),第n 段马路连接第n 个机器人工厂和第1个机器人工厂。
游戏过程中,每个单位时间内,每段马路上都会出现一些金币,金币的数量会随着时间发生变化,即不同单位时间内同一段马路上出现的金币数量可能是不同的。小新需要机器人的帮助才能收集到马路上的金币。所需的机器人必须在机器人工厂用一些金币来购买,机器人一旦被购买,便会沿着环形马路按顺时针方向一直行走,在每个单位时间内行走一次,即从当前所在的机器人工厂到达相邻的下一个机器人工厂,并将经过的马路上的所有金币收集给小新,例如,小新在i(1 ≤ i ≤ n)号机器人工厂购买了一个机器人,这个机器人会从i 号机器人工厂开始,顺时针在马路上行走,第一次行走会经过i 号马路,到达i+1 号机器人工厂(如果i=n,机器人会到达第1 个机器人工厂),并将i 号马路上的所有金币收集给小新。
游戏中,环形马路上不能同时存在2 个或者2 个以上的机器人,并且每个机器人最多能够在环形马路上行走p 次。小新购买机器人的同时,需要给这个机器人设定行走次数,行走次数可以为1~p 之间的任意整数。当马路上的机器人行走完规定的次数之后会自动消失,小新必须立刻在任意一个机器人工厂中购买一个新的机器人,并给新的机器人设定新的行走次数。
以下是游戏的一些补充说明:

  1. 游戏从小新第一次购买机器人开始计时。
  2. 购买机器人和设定机器人的行走次数是瞬间完成的,不需要花费时间。
  3. 购买机器人和机器人行走是两个独立的过程,机器人行走时不能购买机器人,购买完机器人并且设定机器人行走次数之后机器人才能行走。
  4. 在同一个机器人工厂购买机器人的花费是相同的,但是在不同机器人工厂购买机器人的花费不一定相同。
  5. 购买机器人花费的金币,在游戏结束时再从小新收集的金币中扣除,所以在游戏过程中小新不用担心因金币不足,无法购买机器人而导致游戏无法进行。也因为如此,游戏结束后,收集的金币数量可能为负。
    现在已知每段马路上每个单位时间内出现的金币数量和在每个机器人工厂购买机器人需要的花费,请你告诉小新,经过m 个单位时间后,扣除购买机器人的花费,小新最多能收集到多少金币。

【输入】

第一行 3 个正整数,n,m,p,意义如题目所述。
接下来的 n 行,每行有m 个正整数,每两个整数之间用一个空格隔开,其中第i 行描述了i 号马路上每个单位时间内出现的金币数量(1 ≤ 金币数量≤ 100),即第i 行的第j(1 ≤ j ≤m)个数表示第j 个单位时间内i 号马路上出现的金币数量。
最后一行,有 n 个整数,每两个整数之间用一个空格隔开,其中第i 个数表示在i 号机器人工厂购买机器人需要花费的金币数量(1 ≤ 金币数量≤ 100)。

【输出】

共一行,包含1 个整数,表示在m 个单位时间内,扣除购买机器人花费的金币之后,小新最多能收集到多少金币。

【输入样例】

2 3 2
1 2 3
2 3 4
1 2

【输出样例】

5

【提示】【数据范围】

对于 40%的数据,2 ≤ n ≤ 40,1 ≤m≤ 40。
对于 90%的数据,2 ≤ n ≤ 200,1 ≤m≤ 200。
对于 100%的数据,2 ≤ n ≤ 1000,1 ≤m≤ 1000,1 ≤ p ≤m。

【10NOIP普及组】数字统计(two.pas)

【题目描述】

请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6次。

【输入】

共1 行,为两个正整数L 和R,之间用一个空格隔开。

【输出】

共1 行,表示数字2 出现的次数。

【输入样例】

2 22

【输出样例】

6

【输入输出样例2】

2 100

【输出】

20

【数据范围】

1 ≤ L ≤ R≤ 10000。

【10NOIP普及组】接水问题(water.pas)

【题目描述】

学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。
现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i 号同学的接水量为wi。接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j 完成其接水量要求wj 后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第x 秒结束时完成接水,则k 同学第x+1 秒立刻开始接水。若当前接水人数n’不足m,则只有n’个龙头供水,其它m−n’个龙头关闭。
现在给出n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

【输入】

第1 行2 个整数n 和m,用一个空格隔开,分别表示接水人数和龙头个数。
第2 行n 个整数w1、w2、……、wn,每两个整数之间用一个空格隔开,wi 表示i 号同学的接水量。

【输出】

只有一行,1 个整数,表示接水所需的总时间。

【输入样例】

5 3
4 4 1 2 1

【输出样例】

4

【输入输出样例说明】

第1 秒,3 人接水。第1 秒结束时,1、2、3 号同学每人的已接水量为1,3 号同学接完水,4 号同学接替3 号同学开始接水。
第2 秒,3 人接水。第2 秒结束时,1、2 号同学每人的已接水量为2,4 号同学的已接水量为1。
第3 秒,3 人接水。第3 秒结束时,1、2 号同学每人的已接水量为3,4 号同学的已接水量为2。4 号同学接完水,5 号同学接替4 号同学开始接水。
第4 秒,3 人接水。第4 秒结束时,1、2 号同学每人的已接水量为4,5 号同学的已接水量为1。1、2、5 号同学接完水,即所有人完成接水。
总接水时间为4 秒。

【输入输出样例2】

8 4
23 71 87 32 70 93 80 76

【输出】

163

【数据范围】

1 ≤ n ≤ 10000,1 ≤m≤ 100 且m≤ n;
1 ≤ wi ≤ 100。

【10NOIP普及组】导弹拦截(missile.pas)

【题目描述】

经过11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为0 时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。
某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。

【输入】

第一行包含4 个整数x1、y1、x2、y2,每两个整数之间用一个空格隔开,表示这两套导弹拦截系统的坐标分别为(x1, y1)、(x2, y2)。
第二行包含1 个整数N,表示有N 颗导弹。接下来N 行,每行两个整数x、y,中间用一个空格隔开,表示一颗导弹的坐标(x, y)。不同导弹的坐标可能相同。

【提示】

两个点(x1, y1)、(x2, y2)之间距离的平方是(x1− x2)2+(y1−y2)2。
两套系统工作半径r1、r2 的平方和,是指r1、r2 分别取平方后再求和,即r12+r22。

【输出】

只有一行,包含一个整数,即当天的最小使用代价。

【输入样例】

0 0 10 0
2
-3 3
10 0

【输出样例】

18

【提示】# 【样例 1 说明】

样例1 中要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分
别为18 和0。

【输入输出样例2】

0 0 6 0
5
-4 -2
-2 3
4 0
6 -2
9 1

【输出】

30

【样例2 说明】

样例中的导弹拦截系统和导弹所在的位置如下图所示。要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分别为20 和10。

【数据范围】

对于10%的数据,N = 1
对于20%的数据,1 ≤ N ≤ 2
对于40%的数据,1 ≤ N ≤ 100
对于70%的数据,1 ≤ N ≤ 1000
对于100%的数据,1 ≤ N ≤ 100000,且所有坐标分量的绝对值都不超过1000。

【10NOIP普及组】三国游戏(sanguo.pas)

【题目描述】

小涵很喜欢电脑游戏,这些天他正在玩一个叫做《三国》的游戏。
在游戏中,小涵和计算机各执一方,组建各自的军队进行对战。游戏中共有N 位武将(N为偶数且不小于4),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大。游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方。游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军队,规则如下:小涵先从自由武将中选出一个加入自己的军队,然后计算机也从自由武将中选出一个加入计算机方的军队。接下来一直按照“小涵→计算机→小涵→……”的顺序选择武将,直到所有的武将被双方均分完。然后,程序自动从双方军队中各挑出一对默契值最高的武将组合代表自己的军队进行二对二比武,拥有更高默契值的一对武将组合获胜,表示两军交战,拥有获胜武将组合的一方获胜。
已知计算机一方选择武将的原则是尽量破坏对手下一步将形成的最强组合,它采取的具体策略如下:任何时刻,轮到计算机挑选时,它会尝试将对手军队中的每个武将与当前每个自由武将进行一一配对,找出所有配对中默契值最高的那对武将组合,并将该组合中的自由武将选入自己的军队。
下面举例说明计算机的选将策略,例如,游戏中一共有6 个武将,他们相互之间的默契值如下表所示

双方选将过程如下所示:

小涵想知道,如果计算机在一局游戏中始终坚持上面这个策略,那么自己有没有可能必胜?如果有,在所有可能的胜利结局中,自己那对用于比武的武将组合的默契值最大是多少?
假设整个游戏过程中,对战双方任何时候均能看到自由武将队中的武将和对方军队的武将。为了简化问题,保证对于不同的武将组合,其默契值均不相同。

【输入】

共N 行。
第一行为一个偶数N,表示武将的个数。
第2 行到第N 行里,第(i+1)行有(N−i)个非负整数,每两个数之间用一个空格隔
开,表示i 号武将和i+1,i+2,……,N 号武将之间的默契值(0 ≤ 默契值≤ 1,000,000,000)。

【输出】

共1 或2 行。
若对于给定的游戏输入,存在可以让小涵获胜的选将顺序,则输出1,并另起一行输出
所有获胜的情况中,小涵最终选出的武将组合的最大默契值。
如果不存在可以让小涵获胜的选将顺序,则输出0。

【输入样例】

6
5 28 16 29 27
23 3 20 1
8 32 26
33 11
12

【输出样例】

1
32

【输入输出样例说明】

首先小涵拿走5 号武将;计算机发现5 号武将和剩下武将中的4 号默契值最高,于是拿走4 号;小涵接着拿走3 号;计算机发现3、5 号武将之一和剩下的武将配对的所有组合中,5 号和1 号默契值最高,于是拿走1 号;小涵接着拿走2 号;计算机最后拿走6 号。在小涵手里的2,3,5 号武将中,3 号和5 号配合最好,默契值为32,而计算机能推出的最好组合为1 号和6 号,默契值为27。结果为小涵胜,并且这个组合是小涵用尽所有方法能取到的最好组合。

【输入输出样例2】

输入:
8
42 24 10 29 27 12 58
31 8 16 26 80 6
25 3 36 11 5
33 20 17 13
15 77 9
4 50
19
输出:
1
77

【数据范围】

对于40%的数据有N≤ 10。
对于70%的数据有N≤ 18。
对于100%的数据有N≤ 500。

【11NOIP普及组】数字反转(reverse.pas)

【题目描述】

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

【输入】

输入共 1 行,一个整数N。

【输出】

输出共 1 行,一个整数,表示反转后的新数。

【输入样例】

123

【输出样例】

321

【输入输出样例 2】

输入:-380
输出:-83

【数据范围】

-1,000,000,000 ≤ N≤ 1,000,000,000

【11NOIP普及组】统计单词数(stat.pas)

【题目描述】

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

【输入】

2 行:
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【输出】

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。

【输入样例】

To
to be or not to be is a question

【输出样例】

2 0

【输入输出样例 1 说明】

输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。

【提示】# 【输入输出样例 2】

输入:
to
Did the Ottoman Empire lose its power at that time
输出:
-1

【输入输出样例 2 说明】

表示给定的单词 to 在文章中没有出现,输出整数-1。

【数据范围】

1 ≤ 单词长度≤ 10。
1 ≤ 文章长度≤ 1,000,000。

【11NOIP普及组】瑞士轮(swiss.pas)

【题目描述】

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。
本题中介绍的瑞士轮赛制,因最早使用于 1895 年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。
2*N 名编号为1~2N 的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第 1 名和第2 名、第3 名和第4名、……、第2K – 1 名和第2K 名、…… 、第 2N – 1 名和第2N 名,各进行一场比赛。每场比赛胜者得1 分,负者得0 分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。
现给定每个选手的初始分数及其实力值,试计算在 R 轮比赛过后,排名第Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

【输入】

第一行是三个正整数 N、R、Q,每两个数之间用一个空格隔开,表示有2N 名选手、R 轮比赛,以及我们关心的名次Q。
第二行是 2
N 个非负整数s1, s2, …, s2N,每两个数之间用一个空格隔开,其中si 表示编号为i 的选手的初始分数。
第三行是 2*N 个正整数w1, w2, …, w2N,每两个数之间用一个空格隔开,其中wi 表示编号为i 的选手的实力值。

【输出】

只有一行,包含一个整数,即 R 轮比赛结束后,排名第Q 的选手的编号。

【输入样例】

2 4 2
7 6 6 7
10 5 20 15

【输出样例】1

【提示】# 【输入输出样例说明】

【数据范围】

对于 30%的数据,1 ≤ N≤ 100;
对于 50%的数据,1 ≤ N≤ 10,000;
对于 100%的数据,1 ≤ N≤ 100,000,1 ≤ R≤ 50,1 ≤ Q≤ 2N,0 ≤ s1, s2, …, s2N ≤ 108,1 ≤ w1,
w2, …, w2N ≤ 108。

【11NOIP普及组】表达式的值(exp.pas)

【题目描述】

对于 1 位二进制变量定义两种运算:

运算的优先级是:

  1. 先计算括号内的,再计算括号外的。
  2. “×”运算优先于“⊕”运算,即计算表达式时,先计算×运算,再计算⊕运算。
    例如:计算表达式A⊕B × C 时,先计算B × C,其结果再与A 做⊕运算。
    现给定一个未完成的表达式,例如_+(*),请你在横线处填入数字0 或者1,请问
    有多少种填法可以使得表达式的值为0。

【输入】

共2 行。
第 1 行为一个整数L,表示给定的表达式中除去横线外的运算符和括号的个数。
第 2 行为一个字符串包含L 个字符,其中只包含’(’、’)’、’+’、’’这4 种字符,其中’
(’、’)’是左右括号,’+’、’
’分别表示前面定义的运算符“⊕”和“×”。这行字符按顺序
给出了给定表达式中除去变量外的运算符和括号。

【输出】

共1 行。包含一个整数,即所有的方案数。注意:这个数可能会很大,请输出方案数对10007 取模后的结果。

【输入样例】

4
+(*)

【输出样例】

3

【提示】

【输入输出样例说明】

给定的表达式包括横线字符之后为:+(*_)
在横线位置填入(0、0、0)、(0、1、0)、(0、0、1)时,表达式的值均为0,所以共有3种填法。

【数据范围】

对于 20%的数据有0 ≤L≤ 10。
对于 50%的数据有0 ≤L≤ 1,000。
对于 70%的数据有0 ≤L≤ 10,000。
对于 100%的数据有0 ≤L≤ 100,000。
对于 50%的数据输入表达式中不含括号。

你可能感兴趣的:(数据结构&算法)