304 lines
10 KiB
Plaintext
304 lines
10 KiB
Plaintext
NOI95试题
|
||
|
||
第一天 第一题 查阅单词
|
||
|
||
试题
|
||
|
||
一个文本文件仅含有英文字母和分隔符,分隔符包括空格、逗号、句号和换行符。除此
|
||
之外,该文件不含其它符号。一个单词的由一个或多个分隔符分隔的连续字母序列,例如:
|
||
下面是一个包含5个单词的文件
|
||
┏━━━━━━━━━━━━━━━━┓
|
||
┃_Student__must___have↓ ┃
|
||
┃↓ ┃
|
||
┃↓ ┃
|
||
┃a_book<EFBFBD> ┃
|
||
┗━━━━━━━━━━━━━━━━┛
|
||
其中符号“_”为空格符;“↓”为换行符;“<EFBFBD>”为句号。
|
||
文本文件中的第一个句子是从文件头到第一个句号间的字符序列(含句号), 除第一个句
|
||
子之外的所有句子都是由两个句号间的所有字符组成的序列(含后面的句号)。
|
||
编一程序,由键盘输入一个符合上述约定的文本文件名和一个单词, 计算该单词在该
|
||
文件中出现的次数,并输出包含该单词的所有句子(按句子在文件中的先后次序,依次输
|
||
出)。
|
||
注意:
|
||
①文件中每个单词长度不超过20个字母。
|
||
②判断单词是否相同时不区分大小写。例如ABC、Abc、
|
||
ABc、aBC、abc…都是同一个单词。
|
||
|
||
输入数据:
|
||
由键盘输入待查文本文件名和待查单词。
|
||
|
||
输出数据:
|
||
输入文件为output.txt
|
||
该文件第一行为该单词在文件中出现的次数。
|
||
从每二行开始是依先后次序输出的包含该单词的句子。
|
||
在输出句子时请注意:
|
||
①每个句子无论多长只占一行;
|
||
②原句中每一个换行符用一个空格符代替。
|
||
|
||
输入输出范例:
|
||
输入文件内容:
|
||
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||
┃ __Every computer will have MsDos, Borland C Microsoft ┃
|
||
┃ Quick Basic. And Turbo Pascal. For the translati ons ┃
|
||
┃ the teamleaders will be provided with Microsoft Office ┃
|
||
┃ with MS Word and WordPerfect Information on directories┃
|
||
┃ and last instructions will be sent to you in the last ┃
|
||
┃ newsletter and distributed on the day before the first ┃
|
||
┃ contest day._Each student will have the opportunity ┃
|
||
┃ for some practice. On the equipment. ┃
|
||
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||
输出文件内容:
|
||
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||
┃2 ┃
|
||
┃__Every computer will have MsDos, Borland C Microsoft ┃
|
||
┃Quick Basic. ┃
|
||
┃_Each student will have the oppertunity for some practice.┃
|
||
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||
|
||
|
||
第一天 第二题 石子合并
|
||
|
||
试题
|
||
|
||
在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆。规定
|
||
每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
|
||
编一程序,由文件读入堆数N及每堆的石子数(≤20),
|
||
①选择一种合并石子的方案,使得做N-1次合并,得分的总和最小;
|
||
②选择一种合并石子的方案,使得做N-1次合并,得分的总和最大。
|
||
例如,图1所示的4堆石子,每堆石子数(从最上面的一堆数起,顺时针数)依
|
||
次为4 5 9 4。则3次合并得分总和最小的方案为图2,得分总和最大的方案为图3。
|
||
|
||
|
||
4 4 8 * *
|
||
4 5 4 5 -> * 5 -> * 13 -> * 22
|
||
9 9 9 9 *
|
||
|
||
图1 图2
|
||
|
||
|
||
总得分=8+13+22=43
|
||
|
||
|
||
4 4 4 *
|
||
4 5 -> 4 * -> 18 * -> 22 *
|
||
9 14 * *
|
||
|
||
图3
|
||
|
||
总得分=14+18+22=54
|
||
|
||
输入数据:
|
||
文件名由键盘输入,该文件内容为:
|
||
第一行为石子堆数N;
|
||
第二行为每堆的石子数,每两个数之间用一个空格符分隔。
|
||
|
||
输出数据:
|
||
输出文件名为output.txt
|
||
|
||
从第1至第N行为得分最小的合并方案。第N+1行是空行。从第N+2行到第2N+1行是得
|
||
分最大合并方案。
|
||
每种合并方案用N行表示,其中第i行(1≤i≤N)表示第i 次合并前各堆的石子数(依
|
||
顺时针次序输出,哪一堆先输出均可)。 要求将待合并的两堆石子数以相应的负数表示,
|
||
以便标识。
|
||
|
||
输入输出范例:
|
||
┏━━━━━━━┓ ┏━━━━━━━━━┓
|
||
┃输入文件内容:┃ ┃输出文件内容: ┃
|
||
┠───────┨ ┠─────────┨
|
||
┃4 ┃ ┃-4 5 9 -4 ┃
|
||
┃4 5 9 4 ┃ ┃-8-5 9 ┃
|
||
┗━━━━━━━┛ ┃-13 -9 ┃
|
||
┃22 ┃
|
||
┃ ┃
|
||
┃4 -5 -9 4 ┃
|
||
┃4 -14 -4 ┃
|
||
┃-4-18 ┃
|
||
┃22 ┃
|
||
┗━━━━━━━━━┛
|
||
(图6.2-4)
|
||
|
||
|
||
第一天 第三题 最短编号序列
|
||
|
||
试题
|
||
表A和表B各含K(k≤20)个元素,元素编号从1到k。两个表中的每个元素都是由0、
|
||
1组成的字符串。(不是空格)字符串的长度≤20。例如下面的两个表, 每个都含3个元
|
||
素(k=3)。
|
||
|
||
表a 表b
|
||
┏━━━━┯━━━━━┓ ┏━━━━┯━━━┓
|
||
┃元素编号│ 字符串 ┃ ┃元素编号│字符串┃
|
||
┠────┼─────┨ ┠────┼───┨
|
||
┃ 1 │1 ┃ ┃ 1 │111 ┃
|
||
┃ 2 │10111 ┃ ┃ 2 │10 ┃
|
||
┃ 3 │10 ┃ ┃ 3 │0 ┃
|
||
┗━━━━┷━━━━━┛ ┗━━━━┷━━━┛
|
||
对于表A和表B,存在一个元素编号的序列2113,分别用表A中的字符串和表B 中的字符
|
||
串去置换相应的元素编号,可得相同的字符串序列101111110,见下表:
|
||
┏━━━━━━━━━┯━━━━━┯━━━┯━━━┯━━┓
|
||
┃元素编号序列 │ 2 │ 1 │ 1 │ 3 ┃
|
||
┠─────────┼─────┼───┼───┼──┨
|
||
┃用表A的字符串替换 │10111 │ 1 │ 1 │10 ┃
|
||
┠─────────┼─────┼───┼───┼──┨
|
||
┃用表B的字符串替换 │ 10 │111 │111 │ 0 ┃
|
||
┗━━━━━━━━━┷━━━━━┷━━━┷━━━┷━━┛
|
||
对表A和表B,具有上述性质的元素编号序列称之为S(AB)。对于上例S(AB)=2113。
|
||
编写程序:从文件中读入表A和表B的各个元素, 寻找一个长度最短的具有上述性质的
|
||
元素编号序列S(AB)。
|
||
注意:如果对于表A和表B不存在S(AB),即找不到相同元素编号序列对应有相同的长
|
||
度≤100的由0、1组成的字符串序列,这时应输出“No Answer”(无解)。
|
||
|
||
输入数据:
|
||
输入文件名由键盘输入,该文件
|
||
第1行为K的值;
|
||
第2行至第K+1行为表A的内容(依次是元素编号从1到K的相应 0、1字符串);
|
||
第K+2行至第2K+1行为表B的内容(依次是元素编号从1至K的相应0、1字符串)
|
||
|
||
输出数据:
|
||
输出文件名为OUTPUT.TXT,该文件只有一行。或是S(AB)的值,或是“No Answer ”(无
|
||
解时)。s(AB)是元素编号序列,输出时每个编号占一行。
|
||
|
||
输入输出范例:
|
||
┏━━━━━━━┓ ┏━━━━━━━┓
|
||
┃输入文件内容:┃ ┃输出文件内容:┃
|
||
┠───────┨ ┠───────┨
|
||
┃3 ┃ ┃2 ┃
|
||
┃1 ┃ ┃1 ┃
|
||
┃10111 ┃ ┃1 ┃
|
||
┃10 ┃ ┃3 ┃
|
||
┃111 ┃ ┗━━━━━━━┛
|
||
┃10 ┃
|
||
┃0 ┃
|
||
┗━━━━━━━┛
|
||
|
||
|
||
第一天第四题 “互邻”数码序列(已删除)
|
||
|
||
N位由0和1组成的字符串A、B可分别表示为
|
||
A=aNaN-1…ai…a2a1
|
||
B=bNbN-1…bi…b2b1
|
||
其中, ai=0或1, bi=0或1
|
||
1≤i≤N, N≤15
|
||
如果存在某一位j(j∈1…N), 在该位上两串不同, 即aj≠bj, 而其余N-1位上的两串相同,
|
||
即ai=bi(i∈1…N,i≠j), 则称A、B两串“互邻”。
|
||
比如,在N=4时, A=1100, B=1000, A、B 两串“互邻”, 而 C=1100, D=1010, C、D两
|
||
串不“互邻”。
|
||
|
||
编程要求:
|
||
寻找一个含有2N个上述01串的序列, 该序列满足以下要求:
|
||
① 组成该序列的每一个01串都与其它串不同;
|
||
② 第k个串与第k-1个串有“互邻”关系,2≤k≤2N;
|
||
③ 该序列首项由输入指定.
|
||
例如 N=2, 指定首项为01, 则一个满足上述要求的序列为
|
||
01 11 10 00
|
||
|
||
输入数据 ┏━━━━━━┓ ┏━━━━━┓
|
||
文件名由键盘输入 ┃EXAMPLE4.TXT┃ ┃MODEL4.TXT┃
|
||
该文件共有两行 ┠──────┨ ┠─────┨
|
||
第一行为 N ┃2 ┃ ┃2 ┃
|
||
第二行为指定的序列首项 ┃01 ┃ ┃01 ┃
|
||
┃ ┃ ┃11 ┃
|
||
输出数据 ┗━━━━━━┛ ┃10 ┃
|
||
输出文件为 OUTPUT.TXT ┃00 ┃
|
||
第一行为 N ┃ ┃
|
||
第二行至第2N+1行依次输出序列的每一个串. ┗━━━━━┛
|
||
|
||
输入输出举例
|
||
参考输入文件: EXAMPLE4.TXT
|
||
参考输出文件: MODEL4.TXT
|
||
|
||
|
||
第一天第五题 极值问题
|
||
|
||
试题
|
||
|
||
m、n为整数,且满足下列两个条件:
|
||
①m、n∈<EFBFBD>1,2,…,K<EFBFBD>,(1≤K≤ 10^9)
|
||
②(n^2-mn-m^2)^2=1
|
||
编一程序,由键盘输入K,求一组满足上述两个条件的m、n,并且使m^2+n^2的值最大。
|
||
例如,若K=1995,则m=987,n=1597,则m、n满足条件,且可使m^2+n^2的值最大。
|
||
|
||
输入数据:
|
||
键盘输入K。
|
||
|
||
输出数据:
|
||
输出有两行:
|
||
第一行为m的值;
|
||
第二行为n的值。
|
||
|
||
|
||
|
||
第二天试题 下棋
|
||
|
||
一个N×M的棋盘上每格均涂有黑色或白色,黑色代表建筑物,白色代表街道。例如
|
||
下图是个6×8的棋盘。N为行数,M为列数。棋盘上只有建筑物和街道, 不存在广场,
|
||
即任意一个2×2的区域不会全是白格。
|
||
|
||
12345678
|
||
1□□□□□■□■
|
||
2■■□■□□□□
|
||
3□□□■□■□■
|
||
4□■■■□■□□
|
||
5□■□□□■■■
|
||
6□□□■□□□□
|
||
(图6.5-1)
|
||
|
||
现有R枚棋子(代表R个行人)分别放在棋盘的R个白格上, 它们各自有一个目的格
|
||
(也是白格,目的格有可能相同),希望它们能尽快地全部到达目的格,行动规则如下:
|
||
①所有棋子同时行动一次称为一步,行动包括走入相邻白格或原地不动;
|
||
②同一时刻任何一白格内最多只有一枚棋子;
|
||
③棋子行动时可以“跟随”,但不允许“碰撞”。
|
||
|
||
以下情况称为“跟随”,①、②分别代表第1、2号棋子
|
||
|
||
┏━┳━┳━┓ 移动 ┏━┳━┳━┓
|
||
┃①┃②┃ ┃───→┃ ┃①┃②┃
|
||
┗━┻━┻━┛ 一步后 ┗━┻━┻━┛
|
||
┏━┓ ┏━┓
|
||
┃①┃ ┃ ┃
|
||
┏━╋━┫───→┏━╋━┫
|
||
或者 ┃ ┃②┃ ┃②┃①┃
|
||
┗━┻━┛ ┗━┻━┛
|
||
(图6.5-2)
|
||
|
||
以下情况称为“碰撞”
|
||
|
||
┏━┳━┓ ┏━┳━┓
|
||
┃①┃②┃───→┃②┃①┃
|
||
┗━┻━┛ ┗━┻━┛
|
||
(图6.5-3)
|
||
④棋子在到达目的格后即可从棋盘上拿走,此格在下一步才允许走入别的棋子;
|
||
⑤所有棋子均到达目的格所用步数称为收盘步数Step。
|
||
|
||
要求:
|
||
①求R=1时收盘步数最优解;
|
||
②求R=2时收盘步数最优解。较优解酌情给分;
|
||
③R〉2时求较优解。
|
||
|
||
注意:
|
||
以上均要求能判无解(即按前述规则无法使全部棋子到达目的格);
|
||
2≤M≤16; 2≤N≤16; 1≤R≤6;
|
||
解的收盘步数均≤60步。
|
||
|
||
输入数据:
|
||
第1行是M,N(列数在前,行数在后);
|
||
第2行至第N+1行是N×M的0、1矩阵,矩阵元素间有一空格。元素0表示白格,
|
||
1表示黑格;
|
||
第N+2行是R;
|
||
第N+3行至第N+2+R行分别是第1~R号棋子的
|
||
起点横坐标_起点纵坐标_终点横坐标_终点纵坐标
|
||
输入文件不会有错
|
||
注意棋子有编号,编号不可颠倒。
|
||
|
||
输出数据:
|
||
若无解,输出文件为-1;
|
||
若有解,第一行输出收盘步数Step, 第二行至第Step+1行依次输出第一步
|
||
至第Step步后所有棋子位置,每行格式为
|
||
1号棋子横坐标_1号纵坐标_2号横坐标_……_R号纵坐标
|
||
坐标参见(图6.5-1)。特别地,当某个棋子从棋盘上拿去后,其坐标输出为0 0,
|
||
以便标识。
|
||
|
||
评分:
|
||
输入输出文件名由键盘输入,评测时运行时间分三个档次:
|
||
≤5秒, ≤10秒, ≤20秒。
|