WC2008试题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
./checker TestNo
// 注: 输出 12345 , 23451, 45123 , 51234 皆可。
其中 TestNo 为测试点编号。例如你已经得到了数据 5 的输出 password5.out, 可以使用命令./checker 5 来测试你的输出是否合法。 【特别提示】 请妥善保存输入文件*.in 和你的输出*.out,及时备份,以免误删。
设我们有一个整数 39:
… 9 ↓ 1 0 0 1 1 1 9 …
第 8 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
对于下面的输入,该程序的运行过程如下:
… 9 9 ↓ 1 0 0 8 1 1 8 1 1 0 8 1 8 9 9 …
超能纸带机的程序非常简单,只有三种指令: z L
L <符号 C>
该指令的作用是向读写头指向的纸带单元格上写入符号 C, 并将读写头向 左移动一个单元格。符号 C 可以是 0~9 或?之一,其中,C=9 表示向纸带写 入一个空符号,而 C=?表示不改变纸带上的当前符号。 z R
z LOOP-END
LOOP <符号表 H> <循环体> END <符号表 E>
wenku.baidu.com
该指令是一个循环指令,有两个符号表 H 和 E,符号表由 0~9 和?中的零 个或多个符号构成(其中?为通配符,用以匹配任何符号) 。指令中,循环体内 可以是任何合法的零个或多个指令(循环可以无限层嵌套) 。 指令的执行过程如下: 1. 首先判断当前读写头上的符号是否在符号表 H 中(注意?可以 匹配任何符号,所以如果 H 中包含?,则条件一定成立) ,如果不在, 则跳出循环,否则继续执行。注意:当 H 为空时,循环体将不会执行。 2. 执行循环体内的内容。 3. 当执行完循环体的内容后, 判断当前读写头的符号是否在符号 表 E 中(同样,E 中的?也可以匹配任何符号) ,如果不在,则跳出循 环,如果在,则跳转到第 1 步。注意:当 E 为空时,则条件必然不满 足,将跳出循环。 下面是一个 CAM 的程序(#和其后面的内容表示注释) ,其功能是:当读 写头指向一个用二进制表示的整数的第一个符号时,该程序将此整数加 1。
输入文件中的所有整数均不小于 0 且不超过 216。
第 4 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
窥孔密码
【问题描述】 相传古越州人曾发明过一种信息的加密存储方式,他们将信息表达为 10 进 制数字序列并按顺序刻写在一个易碎陶瓷圆盘的边沿上。
很偶然的机会,小布得到了一个陶瓷圆盘,但陶瓷圆盘被封装在一个可以旋 转的偏振盒中(偏振是一种光学现象,只有沿特定方向振动的光波可以通过偏振 。为了研究陶 盒) 。透过偏振盒,小布只能看到连续的 4 个数字(在圆周上连续) 瓷盘上的数字信息,小布的团队决定打开偏振盒取出陶瓷片,但是不幸的是,在 此过程中陶瓷片破碎了。 在小布团队感到万分沮丧的时候,小布突然想起他曾经在笔记本上记下了一 些已经看到的四位数,但是由于偏振盒是可旋转的,这些四位数的位置与顺序已 经不可分辨。小布决定通过分析记录下来的这些四位数尽可能的恢复原始数据。 于是小布找到了你。 你的任务是恢复圆盘的原始数据。你将得到 N 个小布所记录的四位数,任务 是寻找一个尽量短的数字环,该数字环应包含每个小布所记录的四位数。 【输入文件】 这是一道提交答案型试题,所有的输入文件 password*.in 都已在目录下。 输入文件第一行为四位数的个数 N,接下来 N 行每行一个四位数(可能包含 前导 0) 。 【输出文件】 输出文件 password*.out 应包含两行,第一行为一个整数 M,表示你找到的 数字环长度。 第二行包含 M 个数字(相邻数字之间没有空格, 见样例),表示数字环。
注:请注意输出格式要求,如果缺少某一行或者某一行的字符数目和要求不 一致(任何一行中,多余的空格都不允许出现) ,都可能导致该测试点不得分。 【样例输入】 44 0110 2551 1551 0110 【样例输出】 6 xoox ___o ___o xoox 【样例说明】 下图中深色方块安排了志愿者: 0 2 1 0 1 5 5 1 1 5 5 1
第 3 页 共 13 页
0 1 1 0
WinterCamp 2008
浙江 绍兴 2008-1-30
【评分标准】 本题共有 10 个测试点,每个测试点占本题总分数的 10%。 对于每个测试点: 如果仅输出了正确的志愿者的总数目,则得到该测试点 50%的分数; 如果输出了正确的志愿者总数目与方案,则得到该测试点的全部分数; 否则得 0 分; 【数据规模】 所有的 10 组数据中 N, M ,以及景点数 K 的范围规定如下: 测试点编号 1 2 3 4 5 6 7 8 9 10 N ≤2 ≤4 ≤2 ≤6 ≤8 ≤10 ≤9 ≤10 ≤10 ≤10 M ≤2 ≤5 ≤10 ≤7 ≤9 ≤9 ≤10 ≤10 ≤10 ≤10 K ≤2 ≤4 ≤3 ≤5 ≤7 ≤10 ≤10 ≤3 ≤10 ≤10
第 6 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
超能纸带机
【问题描述】 超能纸带机(Capability Advanced Machine, CAM)是由一个简单的 程序、一条无限长的纸带和一个读写头构成的。 纸带由一长列单元格构成,每个单元格上可以写 0~8 的这几种符号之一, 也可以为空。为了方便,使用符号 9 表示对应的单元格为空。 程序开始运行前,纸带上已经有一些符号,这个符号序列称为输入。如下 面就是一个输入:
1 4 3 2 5 5 5 鉴湖 4 3 2 6 1 1 兰亭 2 1 1 1 5 2 3 6 2 3 2 3 周恩来故居 1 1 1 2 4 沈园 八字桥 2 3 5 4 3 2 1 3 4 4 大禹陵 5 4 4 2 1 1 2 1 3 1 1 3 2 东湖 5 4 4 1
图中用深色标出的方块区域就是一种可行的志愿者安排方案,一共需要 20 名志愿者。由图可见,两个相邻的景点是直接(有景点内的路)连通的(如沈园 和八字桥) 。 现在,希望你能够帮助主办方找到一种最好的安排方案。
R <符号 C>
该指令的作用是向读写头指向的纸带单元格上写入符号 C, 并将读写头向 右移动一个单元格。符号 C 可以是 0~9 或?之一,其中,C=9 表示向纸带写 入一个空符号,而 C=?表示不改变纸带上的当前符号。
第 7 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
WinterCamp 2008
浙江 绍兴 2008-1-30
2008 年全国信息学奥林匹克冬令营
NOI Winter Camp 2008
竞赛时间:2008 年 1 月 30 日上午 8:00-13:00
题目名称 目录 可执行文件名 输入文件名 输出文件名 每个测试点时限 测试点数目 每个测试点分值 是否有部分分 题目类型 附加文件 游览计划 trip trip trip.in trip.out 2秒 10 10 有 传统 无 窥孔密码 password N/A password1.in ~ password10in password1.out ~ password10.out N/A 10 10 有 提交答案 checker 超能纸带机 camp camp camp.in camp.out 1秒 10 10 有 传统 camp_r
浙江 绍兴 2008-1-30
游览计划
【问题描述】 从未来过绍兴的小 D 有幸参加了 Winter Camp 2008, 他被这座历史名城的秀 丽风景所吸引,强烈要求游览绍兴及其周边的所有景点。 主办者将绍兴划分为 N 行 M 列(N×M)个方块,如下图(8×8) :
沈园 八字桥 周恩来故居 东湖
大禹陵 兰亭 鉴湖
第 2 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
【输入文件】 输入文件中 trip.in 中第一行有两个整数,N 和 M,描述方块的数目。 接下来 N 行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个景点; 否则表示控制该方块至少需要的志愿者数目。 相邻的整数用 (若干个) 空格隔开, 行首行末也可能有多余的空格。 【输出文件】 输出文件 trip.out 由 N + 1 行组成。第一行为一个整数,表示你所给出的方案 中安排的志愿者总数目。 接下来 N 行,每行 M 个字符,描述方案中相应方块的情况: z z z ‘_’(下划线)表示该方块没有安排志愿者; ‘o’(小写英文字母 o)表示该方块安排了志愿者; ‘x’(小写英文字母 x)表示该方块是一个景点;
# 将读写头移至该整数的最后一个单元格 LOOP 0 1 R ? END ? # 上面的程序中,只要读写头处的符号是 0 或 1 就右移,所以现在指针指向的是 # 整数最后一个单元格的后一个单元格,还需要向左移动将读写头移回到整数最后一位。 L ? # 将整数加 1,首先将末尾连续的 1 变成 0,然后将最后一个 0 变成 1 LOOP 1 L 0 END ? L 1 # 将读写头移回整数的起始位置 LOOP 0 1 L ? END ? # 已经移出整数,需要向右移动一个单元格使读写头指向整数的第一个单元格 R ?
100811811081
输入必定是一串连续的非空符号,除了输入符号,纸带的其他地方都是空 的。上面的输入在纸带上表示如下:
… 9 9 1 0 0 8 1 1 8 1 1 0 8 1 9 9 …
读写头始终指向纸带的一个单元格。它可以由程序控制左右移动,可以由 程序控制向纸带上写入一个符号, 还可以读出单元格上的符号作为程序运行的 参数。 程序开始运行时,读写头指向纸带的第一个非空符号。如下面是程序开始 运行时的读写头和纸带。
景点含于方块内,且一个方块至多有一个景点。无景点的方块视为路。 为了保证安全与便利,主办方依据路况和治安状况,在非景点的一些方块内 安排不同数量的志愿者;在景点内聘请导游(导游不是志愿者) 。在选择旅游方 案时,保证任意两个景点之间,存在一条路径,在这条路径所经过的每一个方块 都有志愿者或者该方块为景点。既能满足选手们游览的需要,又能够让志愿者的 总数最少。 例如,在上面的例子中,在每个没有景点的方块中填入一个数字,表示控制 该方块最少需要的志愿者数目:
提交源程序须加后缀 对于 Pascal 语言 trip.pas 对于 C 语言 trip.c 对于 C++ 语言 trip.cpp
N/A N/A N/A
camp.pas camp.c camp.cpp
注意:最终测试时,所有编译命令均不打开任何优化开关
第 1 页 共 13 页
WinterCamp 2008
第 5 页 共 13 页
WinterCamp 2008
浙江 绍兴 2008-1-30
【样例输入】 3 1234 2345 1234 【样例输出】 5 34512 【评分标准】 每个测试点单独评分。 对于每一个测试点,如果你给出的输出文件不合法,如文件格式错误、输出 解不符合要求等,该测试点得 0 分。否则设你的输出答案长度为 ans,对于不同 的测试点,我们还设有 9 个评分相关的常数 c1 ≤c2 ≤ c3 ≤ c4 ≤ c5 ≤ c6 ≤ c7 ≤ c8 ≤ c9,你在该测试点中的得分由下列陈述得出: 如果 ans > 4N,得 0 分。 如果 ans ≤ 4N,得 1 分。 如果 ans ≤ c9,得 2 分。 如果 ans ≤ c8,得 3 分。 如果 ans ≤ c7,得 4 分。 如果 ans ≤ c6,得 5 分。 如果 ans ≤ c5,得 6 分。 如果 ans ≤ c4,得 7 分。 如果 ans ≤ c3,得 8 分。 如果 ans ≤ c2,得 9 分。 如果 ans = c1,得 10 分。 如果 ans < c1,得 12 分。 如果满足多个条件,取得分最大者为最终得分。 【如何测试你的输出】 你可以使用 checker 程序检查你的输出,格式为:
相关文档
最新文档