1、2003 年第九届 NOIP 复赛试题(普及组)题一、乒乓球(Table.pas)【问题背景】国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 分制和 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。【问题描述】华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 分制和 21 分制下,双方的比赛结果(截至记录末尾)。
2、比如现在有这么一份记录,(其中 W 表示华华获得一分,L 表示华华对手获得一分):WWWWWWWWWWWWWWWWWWWWWWLW在 11 分制下,此时比赛的结果是华华第一局 11 比 0 获胜,第二局 11 比 0 获胜,正在进行第三局,当前比分 1 比 1。而在 21 分制下,此时比赛结果是华华第一局 21 比 0 获胜,正在进行第二局,比分 2 比 1。如果一局比赛刚开始,则此时比分为 0 比 0。你的程序就是要对于一系列比赛信息的输入(WL 形式),输出正确的结果。【输入格式】每个输入文件包含若干行字符串(每行至多 20 个字母),字符串有大写的 W、L 和 E 组成。其中 E 表示比
3、赛信息结束,程序应该忽略 E 之后的所有内容。【输出格式】输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是 11 分制下的结果,第二部分是21 分制下的结果,两部分之间由一个空行分隔。【输入样例】WWWWWWWWWWWWWWWWWWWWWWLWE【输出样例】11:011:01:121:02:1题二、数字游戏(Game.pas)【问题描述】丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共 n 个),你要按顺序将其分为m 个部分,各部
4、分内的数字相加,相加所得的 m 个结果对 10 取模后再相乘,最终得到一个数 k。游戏的要求是使你所得的 k 最大或者最小。例如,对于下面这圈数字(n=4,m=2):当要求最小值时,(2-1) mod 10)(4+3) mod 10)=17=7,要求最大值时,为(2+4+3) mod 10)(-1 mod 10)=99=81。特别值得注意的是,无论是负数还是正数,对 10 取模的结果均为非负值。丁丁请你编写程序帮他赢得这个游戏。【输入格式】输入文件第一行有两个整数,n(1n50)和 m(1m9)。以下 n 行每行有个整数,其绝对值不大于 104,按顺序给出圈中的数字,首尾相接。【输出格式】输出
5、文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。【输入样例】4 243-12【输出样例】7811 32题三、栈(Stack.pas)【问题背景】栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。【问题描述】宁宁考虑的是这样一个问题:一个操作数序列,从 1,2,一直到 n(图示为 1 到 3 的情况),
6、栈 A 的深度大于 n。现在可以进行两种操作,1.将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的 push 操作)2. 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的 pop 操作)使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由 1 2 3 生成序列 2 3 1 的过程。(原始状态如上图所示)1211312 33222332你的程序将对给定的 n,计算并输出由操作数序列 1,2,n 经过操作可能得到的输出序列的总数。【输入格式】输入文件只含一个整数 n(1n18)【输出格式】输出文件只有一行,即可能输出序列的总数目【输入样例】3【输出样例】5题四
7、、麦森数(Mason.pas)【问题描述】形如 2P-1 的素数称为麦森数,这时 P 一定也是个素数。但反过来不一定,即如果 P 是个素数,2 P-1 不一定也是素数。到 1998 年底,人们已找到了 37 个麦森数。最大的一个是 P=3021377,它有 909526 位。麦森数有许多重要应用,它与完全数密切相关。任务:从文件中输入 P(1000P3100000),计算 2P-1 的位数和最后 500 位数字(用十进制高精度数表示)【输入格式】文件中只包含一个整数 P(1000P3100000)【输出格式】第一行:十进制高精度数 2P-1 的位数。第 2-11 行:十进制高精度数 2P-1
8、的最后 500 位数字。(每行输出 50 位,共输出 10 行,不足 500 位时高位补 0)不必验证 2P-1 与 P 是否为素数。【输入样例】131279【输出样例】38600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087