百度之星程序设计大赛试题

High不起来

贡献于2012-06-17

字数:31672 关键词: 试题

2005年百度之星程序设计大赛试题初赛题目 第一题(共四题 100 分):连续正整数( 10 分) 题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。 例如,对于 15 ,其输出结果是: 1 2 3 4 5 4 5 6 7 8 对于 16 ,其输出结果是: NONE 评分标准:程序输出结果是否正确。 解:设输入数为M,输出成功序列数个数为N。 1判断M的奇偶性, 2. M为奇数,必定存在N=2的解;M/N若等于K(正整数)+0.5 ,则此解存在; 3. M为偶数,必定不存在N=2的解,M/N若等于K+0.5 , 则此解存在。 4. 输出解。 第二题(共四题 100 分):重叠区间大小( 20 分) 题目描述:请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的大小。 对一个正整数 n ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B )之间,即 A<=n<=B 或 A>=n>=B ,则 n 属于该行;如果 n 同时属于行 i 和 j ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整数个数。 例如,行( 10 20 )和( 12 25 )的重叠区间为 [12 20] ,其大小为 9 ;行( 20 10 )和( 12 8 )的重叠区间为 [10 12] ,其大小为 3 ;行 (20 10) 和( 20 30 )的重叠区间大小为 1 。 输入数据:程序读入已被命名为 input.txt 的输入数据文本文件,该文件的行数在 1 到 1,000,000 之间,每行有用一个空格分隔的 2 个正整数,这 2 个正整数的大小次序随机,每个数都在 1 和 2^32-1 之间。(为便于调试,您可下载测试 input.txt 文件,实际运行时我们会使用不同内容的输入文件。) 输出数据:在标准输出上打印出输入数据文件中最大重叠区间的大小,如果所有行都没有重叠区间,则输出 0 。 评分标准:程序输出结果必须正确,内存使用必须不超过 256MB ,程序的执行时间越快越好。 解: 第三题(共四题 100 分):字符串替换( 30 分) 题目描述:请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。 输入数据:程序读入已被命名为 text.txt 和 dict.txt 的两个输入数据文本文件, text.txt 为一个包含大量字符串(含中文)的文本,以 whitespace 为分隔符; dict.txt 为表示字符串( s1 )与字符串( s2 )的对应关系的另一个文本(含中文),大约在 1 万行左右,每行两个字符串(即 s1 和 s2 ),用一个 \t 或空格分隔。 dict.txt 中各行的 s1 没有排序,并有可能有重复,这时以最后出现的那次 s1 所对应的 s2 为准。 text.txt 和 dict.txt 中的每个字符串都可能包含除 whitespace 之外的任何字符。 text.txt 中的字符串必须和 dict.txt 中的某 s1 完全匹配才能被替换。(为便于调试,您可下载测试 text.txt 和 dict.txt 文件,实际运行时我们会使用不同内容的输入文件。) 输出数据:在标准输出上打印 text.txt 被 dict.txt 替换后了的整个文本。 评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。 第四题(共四题 100 分):低频词过滤( 40 分) 题目描述:请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多 个单词都出现最少的次数,则将这些单词都删除。 输入数据:程序读入已被命名为 corpus.txt 的一个大数据量的文本文件,该文件包含英 文单词和中文单词,词与词之间以一个或多个 whitespace 分隔。(为便于调试,您可下载 测试 corpus.txt 文件,实际运行时我们会使用不同内容的输入文件。) 输出数据:在标准输出上打印删除了 corpus.txt 中出现次数最少的单词之后的文本( 词与词保持原来的顺序,仍以空格分隔)。 评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。 2005年百度之星程序设计大赛试题总决赛题目 题目描述: 八方块移动游戏要求从一个含 8 个数字(用 1-8 表示)的方块以及一个空格方块(用 0 表示)的 3x3 矩阵的起始状态开始,不断移动该空格方块以使其和相邻的方块互换,直至达到所定义的目标状态。空格方块在中间位置时有上、下、左、右 4 个方向可移动,在四个角落上有 2 个方向可移动,在其他位置上有 3 个方向可移动。例如,假设一个 3x3 矩阵的初始状态为: 8 0 3 2 1 4 7 6 5 目标状态为: 1 2 3 8 0 4 7 6 5 则一个合法的移动路径为: 8 0 3 8 1 3 8 1 3 0 1 3 1 0 3 1 2 3 2 1 4 => 2 0 4 => 0 2 4 => 8 2 4 => 8 2 4 => 8 0 4 7 6 5 7 6 5 7 6 5 7 6 5 7 6 5 7 6 5 另外,在所有可能的从初始状态到目标状态的移动路径中,步数最少的路径被称为最短路径;在上面的例子中,最短路径为 5 。如果不存在从初试状态到目标状态的任何路径,则称该组状态无解。 请设计有效的(细节请见评分规则)算法找到从八方块的某初试状态到某目标状态的所有可能路径中的最短路径,并用 C/C++ 实现。 输入数据: 程序需读入已被命名为 start.txt 的初始状态和已被命名为 goal.txt 的目标状态,这两个文件都由 9 个数字组成( 0 表示空格, 1-8 表示 8 个数字方块),每行 3 个数字,数字之间用空格隔开。 输出数据: 如果输入数据有解,输出一个表示最短路径的非负的整数;如果输入数据无解,输出 -1 。 自测用例: 如果输入为: start.txt 和 goal.txt ,则产生的输出应为: 5 又例,如果用 7 8 4 3 5 6 1 0 2 替换 start.txt 中的内容,则产生的输出应为: 21 评分规则: 1 )我们将首先使用和自测用例不同的 10 个 start.txt 以及相同的 goal.txt ,每个测试用例的运行时间在一台 Intel Xeon 2.80GHz 4 CPU/ 6G 内存的 Linux 机器上应不超过 10 秒(内存使用不限制),否则该用例不得分; 2 )每个选手的总分(精确到小数点后 6 位) =10 秒钟内能产生正确结果的测试用例数量 x10+ ( 1/ 产生这些正确结果的测试用例的平均运行毫秒 ) ; 3 )如果按此评分统计仍不能得出总决赛将决出的一、二、三等奖共计九名获奖者,我们将先设 N=2 ,然后重复下述过程直至产生最高的 9 位得分:用随机生成的另外 10 个有解的 start.txt 再做测试,并对这 10*N 个测试用例用 2 )中公式重新计算总分, N++ 。 2006年百度之星程序设计大赛试题初赛题目 2006 年百度之星程序设计大赛初赛题目 1 饭团的烦恼 “午餐饭团“是百度内部参与人数最多的民间组织。 同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 饭团点菜的需求如下: 1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 输入数据描述如下: 第一行包含三个整数 N , M , K ( 0=0) 输出 对输入的 N,K 如果 N 个员工通过一定的分组方式可能会一共需要 K 场比赛,则输出 "YES", 否则输出 "NO", 每组数据占一行。 所有的输入输出均为标准输入输出。 例子 输入文件 : 2 0 2 1 3 1 3 2 输出 : YES YES NO YES 2006 年百度之星程序设计大赛初赛题目 4 剪刀石头布 N 个小孩正在和你玩一种剪刀石头布游戏。 N 个小孩中有一个是裁判,其余小孩分成三组(不排除某些组没有任何成员的可能性),但是你不知道谁是裁判,也不知道小孩们的分组情况。然后,小孩们开始玩剪刀石头布游戏,一共玩 M 次,每次任意选择两个小孩进行一轮,你会被告知结果,即两个小孩的胜负情况,然而你不会得知小孩具体出的是剪刀、石头还是布。已知各组的小孩分别只会出一种手势(因而同一组的两个小孩总会是和局),而裁判则每次都会随便选择出一种手势,因此没有人会知道裁判到底会出什么。请你在 M 次剪刀石头布游戏结束后,猜猜谁是裁判。如果你能猜出谁是裁判,请说明最早在第几次游戏结束后你就能够确定谁是裁判。 输入格式: 输入文件包含多组测试数据。每组测试数据第一行为两个整数 N 和 M ( 1 ≤ N ≤ 500 , 0 ≤ M ≤ 2000 ),分别为小孩的个数和剪刀石头布游戏进行的次数。接下来 M 行,每行两个整数且中间以一个符号隔开。两个整数分别为进行游戏的两个小孩各自的编号,为小于 N 的非负整数。符号的可能值为“ = ”、“ > ”和“ < ”,分别表示和局、第一个小孩胜和第二个小孩胜三种情况。 输出格式: 每组测试数据输出一行,若能猜出谁是裁判,则输出身为裁判的小孩的编号,并输出在第几次游戏结束后就能够确定谁是裁判。如果无法确定谁是裁判,或者发现剪刀石头布游戏的胜负情况不合理(即无论谁是裁判都会出现矛盾),则输出相应的信息。具体输出格式请参考输出样例。 输入样例: 3 3 0<1 1<2 2<0 3 5 0<1 0>1 1<2 1>2 0<2 4 4 0<1 0>1 2<3 2>3 1 0 输出样例: Can not determine Player 1 can be determined to be the judge after 4 lines Impossible Player 0 can be determined to be the judge after 0 lines 说明: 共有 5 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 5 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 3 秒内结束程序并输出正确的答案才能得分。 所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 五个测试数据集中输入 N 分别不大于 20 、 50 、 100 、 200 和 500 ,各有 10 组测试数据。 2006 年百度之星程序设计大赛初赛题目 5 座位调整 题目描述: 百度办公区里到处摆放着各种各样的零食。百度人力资源部的调研发现,员工如果可以在自己喜欢的美食旁边工作,工作效率会大大提高。因此,百度决定进行一次员工座位的大调整。 调整的方法如下: 1 . 首先将办公区按照各种零食的摆放分成 N 个不同的区域。(例如:可乐区,饼干区,牛奶区等等)。 2 . 每个员工对不同的零食区域有不同的喜好程度(喜好程度度的范围为 1 — 100 的整数, 喜好程度越大表示该员工越希望被调整到相应的零食区域)。 3 . 由于每个零食区域可以容纳的员工数量有限,人力资源部希望找到一个最优的调整方案令到总的喜好程度最大。 数据输入: 第一行包含两个整数 N , M ,( 1<=N , M<=300 )。分别表示 N 个区域和 M 个员工。 第二行是 N 个整数构成的数列 a ,其中 a[i] 表示第 i 个区域可以容纳的员工数, (1<=a[i]<=M , a[1]+a[2]+..+a[N]=M) 。 紧接着是一个 M*N 的矩阵 P , P ( i , j )表示第 i 个员工对第 j 个区域的喜好度。 答案输出: 对于每个测试数据,输出可以达到的最大的喜好程度。 输入样例: 3 3 1 1 1 100 50 25 100 50 25 100 50 25 输出样例: 175 数据解释:此数据只存在一种安排方法,三个员工分别安置在三个区域。最终的喜好程度为 100+50+25=175 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机 时限 1s 百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。 为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。 输入数据: 输入数据包含三部分 1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。 2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) . 3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符) 输出数据: 输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样) 输入例子: 6 PS 门户搜索部 NLP 自然语言处理 PM 产品市场部 HR 人力资源部 PMD 产品推广部 MD 市场发展部 百度的部门包括 PS , PM , HR , PMD , MD 等等,其中 PS 还包括 NLP 小组。 输出例子: 百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。 注意: 1 . 输入数据中是中英文混合的,中文采用 GBK 编码。 2 . 为保证答案的唯一性,缩率语的转换采用正向最大匹配(从左到右为正方向)的原则。请注意输入例子中 PMD 的翻译。 2006年百度之星程序设计大赛试题复赛题目 2006 年百度之星程序设计大赛复赛题目 1 另类杀人游戏 周末的晚上,百度的员工们总喜欢聚集在公司的会议室玩杀人游戏。从 1 警 1 匪到 n 警 n 匪,他们尝试了几乎所有流行的杀人游戏规则。终于有一天,连最热衷杀人游戏, “ 杀人 ” 不眨眼的 Austin 也开始对无休止的辩论感到厌烦。于是,他决定改变他的一贯作风,他开始变成了一个 “ 杀人不睁眼 ” 的杀手。 如何做到杀人不睁眼呢? Austin 早已构思好他的杀人计划: 1 . N 个人(包括 Austin )坐成一圈玩杀人游戏,按顺时针编号 1 , 2 , 3 , 4 。。。。。 2 . Austin 从 1 号开始顺时针开始数到第 m 号就杀掉第一个人。被杀掉的人要退出游戏。 3 . 如果第 m 个人恰好是 Austin 自己,他就杀掉他顺时针方向的下一个人。 4 . Austin 从被杀的人的下一个顺时针数 m 个人,把第 m 个杀掉。 5 . 重复 2-4 ,直至杀掉所有人。 Austin 把这个杀人计谋告诉了法官小 k ,他便可以闭起眼睛杀人啦。作为一个正直善良的法官,小 k 当然不能让残忍的 Austin 得逞,于是,她偷偷把 Austin 的杀人计划告诉了作为警察的你,聪明的百度之星。现在,你的任务是活到最后,与 Austin 单挑。 输入: 第一个行包含一个整数 T ,表示有 T 组测试数据。 对于每组测试数据: 三个整数 N , M , T , (3<=N<=10000,1<=M,T<=10000) 分别表示参与游戏的人数, Austin 每隔 M 个人会杀掉一人, Austin 初始位置的标号。 输出: 每个测数数据输出一个整数。 你需要选择的初始位置的序号,以确保最后剩下的两个人是你与 Austin 。 输入例子: 2 7 4 1 7 4 1 输出例子 5 5 例子说明:杀人顺序为 4 2 7 6 3 5 , 所以 5 是你要选择的位置。 2006 年百度之星程序设计大赛复赛题目 2 空中飞猴 马戏团里新来了一只很特别的小猴子皮皮 —— 不仅长得漂亮,还很聪明。自从它来到马戏团之后, “ 空中飞猴 ” 成了马戏团里保留节目,慕名观看的人络绎不绝。 “ 空中飞猴 ” 表演开始时,空中架着两根长长的钢丝。皮皮在其中一根上,它的目标是到达另一个根钢丝上。皮皮必须在爬行一定距离后纵身一跃,直接跳到另一根钢丝的某个位置。由于皮皮的速度非常快,它的运动轨迹可以近似的看成一条直线段。为了不让自己太危险,皮皮希望自己的跳跃距离尽量短,而为了不让观众等得太不耐烦,它在钢丝上的爬行距离不能超过 d 。在爬行距离不超过 d 的情况下,皮皮的跳跃距离最短是多少? 输入格式: 输入文件包含多组测试数据。每组测试数据包含 16 个实数 x1 , y1 , z1 , x2 , y2 , z2 , x3 , y3 , z3 , x4 , y4 , z4 , xp , yp , zp , d ,表示两根钢丝分别为线段 (x1,y1,z1)-(x2,y2,z2) 和 (x3,y3,z3)-(x4,y4,z4) ,皮皮的坐标为 (xp, yp, zp) ,最大爬行距离为 d 。皮皮保证在第一条钢丝上,保证每条钢丝长度大于零。但两条钢丝有可能相交甚至重叠。 输出格式: 每组测试数据输出一行,仅包含一个非负实数,四舍五入保留三位小数,即最短跳跃距离。 输入样例: 0.0 0.0 0.0 4.0 4.0 0.0 4.0 0.0 1.0 0.0 4.0 1.0 2.0 2.0 0.0 10.0 输出样例: 1.000 说明: 共有 3 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 30 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 3 秒内结束程序并输出正确的答案才能得分。 所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 三个测试数据集各有 10000 组测试数据。 2006 年百度之星程序设计大赛复赛题目 3 星球大战 公元 4999 年,人类科学高度发达,绝大部分人都已经移居至浩瀚的宇宙,在上千颗可居住星球上留下了人类的印记。然而,此时人类却分裂成了两个联盟:正义联盟和邪恶联盟。两个联盟之间仇恨难解,时有战争。 现在,正义联盟计划要破坏邪恶联盟的贸易网络,从而影响邪恶联盟的经济状况,为下一次战争作好准备。邪恶联盟由数百颗星球组成,贸易通过星球间的运输航道来完成。一条运输航道是双向的且仅连接两个星球,但两个星球之间可以有多条航道,也可能没有。两个星球之间只要有运输航道直接或间接的相连,它们就可以进行贸易。正义联盟计划破坏邪恶联盟中的一些运输航道,使得邪恶联盟的星球分成两部分,任一部分的星球都不能与另一部分的星球进行贸易。但是为了节省破坏行动所需的开支,正义联盟希望破坏尽量少的运输航道来达成目标。请问正义联盟最少需要破坏多少条运输航道呢? 输入格式: 输入文件包含多组测试数据。每组测试数据第一行为两个整数 N 和 M ( 2 ≤ N ≤500 , 0≤M≤N(N-1)/2 ), N 为邪恶联盟中星球的数量。接下来 M 行,每行三个整数 A 、 B 和 C ( 0 ≤A , B0 ),表示星球 A 和星球 B 之间有 C 条运输航道。运输航道的总数量不超过 10 8 。 输出格式: 每组测试数据输出一行,包含一个整数,表示需要破坏的运输航道的数量。 如果输入的贸易网络本来就是不连通的,则输出 0 。 输入样例: 3 3 0 1 1 1 2 1 2 0 1 4 3 0 1 1 1 2 1 2 3 1 8 14 0 1 1 0 2 1 0 3 1 1 2 1 1 3 1 2 3 1 4 5 1 4 6 1 4 7 1 5 6 1 5 7 1 6 7 1 4 0 1 7 3 1 输出样例: 2 1 2 说明: 共有 5 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 5 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 10 秒内结束程序并输出正确的答案才能得分。 所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 五个测试数据集中输入 N 分别不大于 20 、 50 、 100 、 200 和 500 ,各有 9 组测试数据。 2006 年百度之星程序设计大赛复赛题目 4 彩球游戏 X 博士是一个研究儿童智力开发方法的科学家,他为幼儿教育领域做出了许多贡献。最近, X 博士正在研究一种适合儿童的游戏,用以辅助发展儿童的观察力、注意力和思维能力。经过连日的构思, X 博士终于设计出了一种游戏:彩球游戏。 彩球游戏是一种单人参与的游戏,游戏首先给出一串由许多不同颜色的小球组成的小球序列,以及一个整数参数 M ( M ≥ 2 )。一段连续的具有相同颜色的小球序列称为连续同色序列。小孩,即游戏参与者,每次可以向任意一段连续同色序列插入一个同色小球,使该序列的长度加一。当一段连续同色序列在插入一个同色小球后其长度达到 M 时,该序列就会爆炸消失,然后原序列两边的其余小球会重新连成一串,如果两段相同颜色的连续同色序列在此时连接在一起,它们就会合并形成一段新的连续同色序列。如果新形成的连续同色序列长度达到 M ,这段序列也会爆炸消失,然后重复上述过程,直到没有新的长度达到 M 的连续同色序列出现为止。游戏的目标很简单,就是插入尽量少的小球,使得所有小球都爆炸消失掉。 通过长时间的游戏和不断提高游戏水平,这个游戏可以很好地开发儿童的观察力、注意力和思维能力。但是 X 博士仍然面临着一个困难的问题,他还需要设计出一个游戏演示 AI 程序,可以以最优的方式(即插入的小球数量最小)进行游戏,用于游戏教学,或者在游戏中对小孩给出提示。 X 博士并不擅长此类程序,因而他无法完成这个任务,你可以帮助他吗? 输入格式: 输入文件包含多组测试数据。每组测试数据第一行为整数 M ( 2 ≤M≤20 ),第二行为一条非空的字符串,由大写字母组成且长度不超过 200 ,表示初始的一串小球,不同的字母表示不同的小球颜色。初始时可能会存在一些长度达到 M 的连续同色序列,但这些序列不会马上爆炸消失。 输出格式: 每组测试数据输出一行,表示至少需要插入多少次小球才能使所有小球爆炸消失掉。 输入样例: 3 AAABAAA 3 ABBABBA 输出样例: 2 2 说明: 共有 5 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 5 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 30 秒内结束程序并输出正确的答案才能得分。 所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 五个测试数据集中输入初始小球队列的长度分别不大于 10 、 20 、 50 、 100 和 200 ,各有不超过 5000 组测试数据。 2006 年百度之星程序设计大赛复赛题目 5 追捕 四个小孩正在花园里玩追捕游戏。一个小孩扮演逃亡者,其余三个小孩做追捕者。花园是一块由 N 行 M 列方格组成的草地,花园周围有木栏包围着,不能走出,花园里面还有一些障碍物不能够通过。游戏可以进行许多回合,每个回合分成两轮,第一轮追捕者可以进行追捕行动,第二轮逃亡者可以根据前一轮追捕者的行动开展逃亡旅程。在第一轮里,三个追捕者必须在三人中选择一个人向某个相邻的方格走一步,只有在三个人都没有可以走的相邻方格时,他们才允许选择停留在原地。在第二轮里,逃亡者也必须选择某个相邻的方格走一步,如果逃亡者没有任何可走的方格,那么逃亡者就被捕了。四个小孩都不允许走到有障碍物或其他人的方格上,也不能走出花园,因而,四个小孩总是会位于不同的方格上面。 这些小孩都是非常聪明的,三个追捕者也是团结一致的。追捕者如果有可以捉到逃亡者的方法,那么他们就一定不会错过。逃亡者如果有不被捕获的方法,那么他也不会犯错。除此之外,追捕者会希望尽快地捉到逃亡者,而逃亡者即使在会被捕获的情况下也会尽可能地拖延时间。给定花园的障碍物的分布图和四个小孩的初始位置,你知道追捕者有方法捉到逃亡者吗?如果有,他们要经过多少轮后才能捉到逃亡者呢? 输入格式: 输入文件包含多组测试数据。每组测试数据第一行为两个整数 N 和 M ( 1 ≤ N ≤10 , 1≤M≤10 ),为花园方格阵列的行数和列数。接下来 N 行,每行 M 个字符,可以为 “ . ” 、 “ # ” 、 “ O ” 和 “ X ” ,分别表示空地、障碍物、追捕者和逃亡者。追捕者总是会有三个,而且四个小孩一开始也都会在空地上面。 输出格式: 每组测试数据输出一行,若追捕者能够捉到逃亡者,则输出他们要经过多少轮后才能成功。轮数的计算包括追捕者和逃亡者进行行动的两轮,逃亡者被捕获的那一轮不算,因而结果总是一个奇数。具体输出格式请参考输出样例。 输入样例: 2 2 OO OX 3 3 OOO ##X ... 3 3 OO# ### .OX 3 4 OO## #### ..OX 4 4 OOO. .... .... ...X 5 5 O...O ..... ..#.. ..... O...X 5 5 O...O ..... ...#. ..... O...X 6 6 ...... .O..O. ..##.. ..##.. .O..X. ...... 6 6 #..... .O..O. ..##.. ..##.. .O..X. ...... 10 10 .......... .......... ..O....O.. .......... .......... .......... .......... ..O....X.. .......... .......... 10 10 .......... .#.#.#.#.# ..O.....O. .#.#.#.#.# .......... .#.#.#.#.# .......... .#.#.#.#.# ..O.....X. .#.#.#.#.# 输出样例: The escapee will be captured after 1 steps The escapee will be captured after 7 steps The escapee will be captured after 5 steps The escapee will never be captured The escapee will be captured after 21 steps The escapee will never be captured The escapee will be captured after 41 steps The escapee will never be captured The escapee will be captured after 39 steps The escapee will never be captured The escapee will be captured after 51 steps 说明: 共有 5 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 5 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 60 秒内结束程序并输出正确的答案才能得分。 所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 五个测试数据集中输入 N 、 M 分别不大于 6 、 7 、 8 、 9 和 10 。 2006年百度之星程序设计大赛试题总决赛题目 俄罗斯方块 俄罗斯游戏中共有七种方块,每种方块都由四个方格组成,如下图所示,七种方块分别编号为 1~7 。 游戏中,每次落下一个方块,落到一个宽度为 10 格的槽中。方块的下部一旦碰到槽的底部,或槽中已有的方块,就不能再移动。方块落下不动后,如果有某些行因落下的方块而填满,这些行将被消去。方块下落前,你可以控制方块的左右移动和旋转,以将其放在合适的位置。你对方块的所有移动和旋转操作在下落前(槽外)就计算完毕,然后直接下落到底,下落过程中不能再做操作。如果方块刚刚落下后顶部高度大于 17 行,游戏结束 -- 即使此时有些行可以消除。 交互方式 你的程序应当包含 tetris_lib.h ,并连接相应的库文件。库中的两个重要函数是: void StartGame(int* t1, int* t2); int Step(int r, int l, int* next); 你的程序应该首先调用 StartGame ,其中 t1 和 t2 表示前两个方块的编号( t2 对应于传统游戏中的 " 下一个方块 " )。接下来,你的程序每次可以使用 Step 函数下落一个方块,返回消去的行数。 r 表示旋转方式( r=0, 1, 2, 3 分别表示顺时针旋转 0 度、 90 度、 180 度、 270 度), l 表示方块在旋转后的最左边一格的列编号(从左到右依次为 1, 2, … , 10 ),而 next 表示方块落下后新的下一个方块编号( 0 代表没有下一个方块,下一次 Step 调用后库将自动终止你的程序)。你的程序不应自行终止。 关于自测的提示 调用 StartGame 函数时,库将从标准输入中读入若干行,每行包括一个整数,表示方块的编号。你可以利用这一点对你的程序进行测试。程序运行结束后,测试库将把结束原因和得分显示在标准输出中。 库中还有两个函数可以用于自测: void SetLog(const char* filename); void Snapshot(); 如果需要测试库记录程序的行为,请在调用 StartGame 之前调用 SetLog 函数。 评分规则 在与测试库交互的过程中,出现以下条件之一,则库将终止程序: 1 、调用参数非法 2 、方块刚刚落下后,其顶部高度大于 17 行 3 、所有方块均已落下 4 、本数据的运行总时间超过 1 秒钟 程序终止后,假设一次消去 1 行、 2 行、 3 行、 4 行的次数分别为 a, b, c, d ,则该数据原始得分为 2b+ 6c +10d 。换句话说,消去单独的 1 行不得分。 对于每个数据,得分排名前八的程序分别得到 10, 7, 6, 5, 4, 3, 2, 1 分。如果原始得分相同,则消去行数多的排名在前;如果原始得分和消去行数都相同,则下落方块总数多的排名在前。如果三者都相同,则得分相同。消去行数为 0 的程序不得分,即使它排在前八。 最终成绩按照 50 个数据的总分从大到小排序,如果总分相同则按所有数据的原始得分之和排序;如果仍有相同,则按所有数据的消去的总行数排序;如果仍相同,则名次相同。 2007年百度之星程序设计大赛试题初赛题目 百度的高级搜索方法 (2007 年初赛) 题面描述: 你尝试过在百度上使用 site inurl 语法查询吗 ? 如果还没有的话可以试一下 :) 如输入 site:www.baidu.com inurl:news 则会搜出所有在 www.baidu.com 站点上的包含 "news" 子串的 url 。 现在我们有两份数据,一份是 site_inurl.txt 一份是 url.txt site_inurl.txt 中每行是一个 site inurl 语法组成的查询串, url.txt 中保存的是 url 列表。 你能否在 url 列表中找出所有能被 site_inurl.txt 中的查询串检索到的 url? 如 site_inurl.txt 内容如下: site:www.baidu.com inurl:/more site:zhidao.baidu.com inurl:/browse/ site:www.sina.com.cn inurl:www20041223am url.txt 内容如下: http://www.baidu.com/more/ http://www.baidu.com/guding/more.html http://www.baidu.com/events/20060105/photomore.html http://hi.baidu.com/browse/ http://hi.baidu.com/baidu/ http://www.sina.com.cn/head/www20021123am.shtml http://www.sina.com.cn/head/www20041223am.shtml 则你的程序运行完输出的结果应该为: http://www.baidu.com/more/ http://www.baidu.com/guding/more.html http://www.sina.com.cn/head/www20041223am.shtml 程序以命令行形式传入这两个文件名,第一个参数为 site_inurl 文件对应的文件名,第二个参数为 url 列表对应的文件名,程序的输出请输出到标准输出。 Wii 游戏开始啦!( 2007 年初赛) 题目描述 为了在紧张的上班时间让员工们轻松些,百度休息室里放置着按摩椅、 CD 、高尔夫套装和 Wii 游戏机等休闲用品。其中最受欢迎的当然是游戏机。 wii 游戏机每个手柄需要使用两节电池(这两个电池可以是不同的品牌)。工程师们在玩游戏时。如果手柄没有电,他们都是将其中没电的电池拿走,并换上一个全新的电池,有电的必须继续使用。 例如,已知三种电池的使用时间分别为 3 小时、 5 小时和 8 小时。一开始,工程师使用 3 小时和 5 小时的电池。 3 小时后,换上一个 8 小时的,再过 2 小时后,手柄再次没电时,已经没有电池可用了。但如果一开始就使用那个 8 小时电量的电池,可以玩满 8 个小时。 告诉你每个品牌电池的使用时间以及该品牌电池的个数,请计算工程师们玩游戏时间的最小值和最大值。 输入格式 输入第一行为一个正整数 n ,表示电池的种数。接下来 n 行,每行两个整数 L 和 F ,表示使用时间为 L 的电池有 F 个。 输出格式 输出仅一行,包含两个整数,分别表示工程师们的最短游戏时间和最长游戏时间(短的时间在前)。两个整数之间以空格隔开。 输入样例 3 3 2 5 2 8 2 输出样例 5 8 实习生小胖的百度网页过滤器( 2007 年初赛) 题目描述 百度网页采集器 (Baiduspider) 每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下: 1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重; 2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。 3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。 4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个 “ 有效 ” 好词,则只计算最长 “ 有效 ” 好词的权重,下一次匹配从这个最长 “ 有效 ” 好词末尾的下一个位置开始。 5. “ 无效 ” 好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。 现在小胖已经做好了第 1 步的工作,有一个好词和坏词的列表(词典),但是由于没有对中文文本处理的程序经验,他想请未来的百度之星们帮他完成这个程序。 输入格式 输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为 “ 词 空格 词的权重 ” 。权重为一个带符号 32 位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为 0 的词。 测试数据中的词全部为 1-5 个字的中文,但作为 “ 网页 ” 的字符串中同时包含中文和 ASCII 字符,每个汉字占 2 个字节。并非 “ 网页 ” 中的所有字都在词典中。 样例输入 小胖之喷火龙骑士 !! 小胖 6 喷火 -1 喷火龙 -1 火龙 -1 龙 4 龙骑 3 龙骑士 2 骑士 -2 士 3 输出格式 输出仅一行,为网页总权重(答案保证不超过带符号 32 位整数的范围)。 样例输出 7 样例解释 从 “ 网页 ” 中找到的好词为 “ 小胖 ” 和 “ 龙 ” ,坏词为 “ 喷火 ” 和 “ 骑士 ” 。特别要说明一下 “ 龙 ” 被识别为好词的原因 ——“ 喷火 ” 和 “ 喷火龙 ” 均为坏词,按正向最短匹配得到 “ 喷火 ” ,接着往下匹配到好词 “ 龙 ” 、 “ 龙骑 ” 和 “ 龙骑士 ” ,但是由于 “ 骑士 ” 是坏词,所以 “ 龙骑 ” 、 “ 龙骑士 ” 无效而 “ 龙 ” 是最长的有效好词。注意题目描述中的匹配规则,好词的 “ 有效 ” 和 “ 无效 ” 只考虑该好词的一部分与后续字是否能够组成坏词,而不考虑和前面的字是否能够组成坏词 —— 样例中的 “ 龙 ” 虽然可以与前面的字组成坏词 “ 喷火龙 ” 和 “ 火龙 ” ,但由于这两个词都是未能匹配成功的坏词,因此对好词 “ 龙 ” 的词性没有影响,可以累积 “ 龙 ” 的权重。 百度时间( 2007 年初赛) 题目描述 Baidu 的服务器上使用的不是北京时间,而是 Baidu 时间。 Baidu 时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从 2000 年 1 月 1 日 起的第几天。 现在就请大家设计一个程序将北京时间转换为百度时间。 输入格式 输入数据的每一行为一个待转化的北京时间,格式包括两种: 一种为: YYYY-MM-DD ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期); 另一种为: MM/DD/YYYY ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期); 不符合任何一种格式的输入视为非法输入。 输出格式 每个数据输出一行。如果格式正确,输出一个正整数,否则输出 Error 。 输入样例 2006-03-21 AStar2007 04/22/2007 输出样例 2149 Error 2463 SQL 中的 SELECT 语句( 2007 年初赛) 题目描述: SQL 中 SELECT 语句用于从数据库中查询记录。某个工程项目数据库中有一个表,表中满足某个条件的记录数要被频繁查询。查询表中满足某条件的记录数的 SELECT 语句如下: SELECT 记录数语句: “ SELECT COUNT(*) ” + “ ” + FROM 部分 + “ ” +WHERE 部分 或者 “ SELECT COUNT(*) ” + “ ” + FROM 部分 SELECT 记录语句: “ SELECT * ” + “ ” + FROM 部分 + “ ” +WHERE 部分 或者 “ SELECT * ” + “ ” + FROM 部分 TABLENAME : 基本单元 FROM 部分: “ FROM ” + “ ” +TABLENMAE 或者 “ FROM ( ” +SELECT 记录语句 + “ ) ” PROPERTY : 基本单元 VALUE : 基本单元 条件部分: PROPERTY + “ = ” +VALUE 或者 PROPERTY + “ = ” +VALUE+ “ ” + “ and ” + “ ” + 条件部分 WHERE 部分: “ WHERE ” + “ ” + 条件部分 基本单元:由大小写字母和数字字符( 0-9 )组成的长度不超过 10 的非空字符串 给定表中的所有记录,根据给定的 SELECT 记录数语句要求输出相应的结果(满足条件的总记录数)。 数据输入: 有多个测试例子: 每个测试例子:第一行两个整数 N ( 2 < N <= 1000 )和 M(0< M <= 10000) 分别表示数据库中表的记录数和查询次数;第二行是一个表名 (TABLENAME) ;第三行表中的 C 列属性名( PROPERTY )( 0 < C < 11 ),之间用空格隔开,列属性名各不相同;接下来 N 行,每行表示一个记录,有 C 个 VALUE ,之间用空格隔开;接下去有 M 行,每行一个 SELECT 记录数语句,每个 SELECT 记录数语句长度(包括空格)不超过 1000 ,输入数据保证每条 SELECT 记录数语句满足上面的定义,并且 SELECT 记录数语句中出现的表名和输入的表名一致。 数据输出: 每个测试例子输出 M 行每行一个整数表示 SELECT 语句输出的结果。 输入样例: 5 6 Book BookName Price PublishDate Author NBAsports 10 2004 dearboy SQL 20 2002 absorbed IntrotoAlgorithm 59 2002 Thomas MultipeView 60 2002 RichardHautley NBAsports 10 2004 dearboy SELECT COUNT(*) FROM Book WHERE BookName=NBAsports and Author=dearboy SELECT COUNT(*) FROM Book WHERE Price=20 SELECT COUNT(*) FROM Book WHERE Author=lala SELECT COUNT(*) FROM (SELECT * FROM Book WHERE BookName=NBAsports) SELECT COUNT(*) FROM (SELECT * FROM Book WHERE BookName=NBAsports) WHERE Price=20 SELECT COUNT(*) FROM Book 输出样例: 2 1 0 2 0 5 注意 :大量数据建议使用 scanf(), printf(),gets() 读写数据 繁忙的会议室预定问题( 2007 年初赛) 题目描述 百度由最开始的 7 人团队迅速发展为几千人的大团队,而工程师们经常需要在一起进行 “ 头脑风暴 ” ,这样会议室就成了紧缺资源。为了有效利用资源,大家决定制定规则, 自动安排会议室的使用。 为了公平起见,应按照申请时间从早到晚依次考虑,先到先得,且申请一旦被接受就不能取消。注意同一时间开的不同会议必须在不同的会议室,而同一个人不能同时参加两个会议。 输入格式 输入第一行为会议室总数 n 和请求总数 m ;第二行是 n 个整数,表示会议室能够容量的人数。以下 m 行每行是一个请求,按请求时间先后顺序排列(即应优先满足在输入中更早出现的请求)。 每个请求中第一个是整数,表示会议需要的时间长度(单位:小时);之后为与会人名单。人名由不超过四个汉字组成,用半角逗号分隔(每人名字固定且唯一,有重名的也在登记时区分开)。名单后的数字表示可以安排会议的时间,也以半角逗号分隔,如 10,11,14,15 表示第 10, 11, 14, 15 个小时可以开会(会议时间为 9 到 19 之间的正整数)。 输出格式 输出 m 个数,依次表示每个请求是否被接受。 1 表示接受, 0 表示不接受。 输入样例: 4 20 2 3 张三 , 李四 , 王五 10,11,12,14,15 1 张三 12 4 王六 , 王七 , 王八 , 王九 , 王十 9,10,11,12,13,14,15 2 张三 14,15 输出样例: 1 0 0 1 水果开会时段( 2007 年初赛) 题目描述; 每个百度工程师团队都有一笔还算丰裕的食品经费,足够每天购置多种水果。水果往往下午送达公司前台。前台的姐姐们只要看到同时出现五种或以上的水果,就称之为 “ 水果开会 ” 。 从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如 “ 小雪梨 ” 和 “ 大雪梨 ” 是同一种水果,而 “ 核桃 ” 和 “ 水蜜桃 ” 也被认为是同一种水果。尤其要指出的是,如果有三种水果 x, y, z 同时在前台出现,且 x 和 y 是同一种水果, y 和 z 也是同一种水果的时候, x 和 z 也被认为是同一种水果。现在前台的姐姐们想知道,今天是否有 “ 水果开会 ”—— 五种或更多的水果同时在前台出现。 输入格式 输入的第一行只有一个整数 n ,表示购置水果的组数。接下来的 n 行表示水果的到达时间、取走时间(时间用 1200 到 1900 之间的正整数表示,保证取走时间大于到达时间)。剩下的字符串以空格分割每一种水果。如 “ 1400 1600 雪梨 水蜜桃 ” ,表示下午两点到四点(包含两点和四点这两个时间点),雪梨和水蜜桃会在前台等待开会。每种水果名称由不超过十个汉字组成。 输出格式 输出仅一行,包含一个字符串 Yes 或 No ,分别表示今天水果开会与否。 输入样例 1 3 1200 1400 雪梨 柠檬 1300 1400 西瓜 苹果 1400 1800 花生 水蜜桃 输出样例 1 Yes 输入样例 2 3 1200 1400 雪梨 柠檬 1400 1500 哦 大梨 呀 1500 1800 咦 大梨 输出样例 2 No 大话西游与数字游戏( 2007 年初赛) 题目描述 “ 叉烧鸡翅膀,我呀最爱吃! ……” 百度 spider 组的 “ 黑龙潭之行 ” 在烤着鸡翅,唱着星爷的经典时达到高潮。大家在篝火旁围成一圈,开始玩 “ 数 7 ” 加强版游戏,规则如下: 规则 1 : 遇 7 的倍数或含 7 的数时 pass 。 规则 2 : 遇有包含相同数字的数时 pass 。注意相同数字不必相邻。例如 121 。 数错的惩罚很残酷 —— 吞食烤全羊。为避免惩罚,百度工程师们需要你 —— 史上最强程序员的帮助。百度工程师想知道: req1 x :符合规则 1 的第 x 个数是什么? req2 y :符合规则 2 的第 y 个数是什么? req12 z :同时符合规则 1 、 2 的第 z 个数是什么? query n :数 n 是规则 1 中的第几个数,是规则 2 中的第几个数? 输入格式 输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为 req1 、 req2 、 req12 、 query (区分大小写)。 输出格式 前三种查询输出一个无符号整型的解。对于 “ query n ” 的查询,若 n 是规则中的数则输出相应的解,否则输出 -1 。 输入样例 req1 10 req2 10 req12 10 query 14 输出样例 11 10 12 -1 13 补充说明 输入数据共分五组,前四组中: 1<=x<=10000000,1<=y<1000000,1<=z<250000, 1<=n<24000000. ;第五组中的 y 可能达到 5000000 2007年百度之星程序设计大赛试题初赛题目 百度的高级搜索方法 (2007 年初赛) 题面描述: 你尝试过在百度上使用 site inurl 语法查询吗 ? 如果还没有的话可以试一下 :) 如输入 site:www.baidu.com inurl:news 则会搜出所有在 www.baidu.com 站点上的包含 "news" 子串的 url 。 现在我们有两份数据,一份是 site_inurl.txt 一份是 url.txt site_inurl.txt 中每行是一个 site inurl 语法组成的查询串, url.txt 中保存的是 url 列表。 你能否在 url 列表中找出所有能被 site_inurl.txt 中的查询串检索到的 url? 如 site_inurl.txt 内容如下: site:www.baidu.com inurl:/more site:zhidao.baidu.com inurl:/browse/ site:www.sina.com.cn inurl:www20041223am url.txt 内容如下: http://www.baidu.com/more/ http://www.baidu.com/guding/more.html http://www.baidu.com/events/20060105/photomore.html http://hi.baidu.com/browse/ http://hi.baidu.com/baidu/ http://www.sina.com.cn/head/www20021123am.shtml http://www.sina.com.cn/head/www20041223am.shtml 则你的程序运行完输出的结果应该为: http://www.baidu.com/more/ http://www.baidu.com/guding/more.html http://www.sina.com.cn/head/www20041223am.shtml 程序以命令行形式传入这两个文件名,第一个参数为 site_inurl 文件对应的文件名,第二个参数为 url 列表对应的文件名,程序的输出请输出到标准输出。 Wii 游戏开始啦!( 2007 年初赛) 题目描述 为了在紧张的上班时间让员工们轻松些,百度休息室里放置着按摩椅、 CD 、高尔夫套装和 Wii 游戏机等休闲用品。其中最受欢迎的当然是游戏机。 wii 游戏机每个手柄需要使用两节电池(这两个电池可以是不同的品牌)。工程师们在玩游戏时。如果手柄没有电,他们都是将其中没电的电池拿走,并换上一个全新的电池,有电的必须继续使用。 例如,已知三种电池的使用时间分别为 3 小时、 5 小时和 8 小时。一开始,工程师使用 3 小时和 5 小时的电池。 3 小时后,换上一个 8 小时的,再过 2 小时后,手柄再次没电时,已经没有电池可用了。但如果一开始就使用那个 8 小时电量的电池,可以玩满 8 个小时。 告诉你每个品牌电池的使用时间以及该品牌电池的个数,请计算工程师们玩游戏时间的最小值和最大值。 输入格式 输入第一行为一个正整数 n ,表示电池的种数。接下来 n 行,每行两个整数 L 和 F ,表示使用时间为 L 的电池有 F 个。 输出格式 输出仅一行,包含两个整数,分别表示工程师们的最短游戏时间和最长游戏时间(短的时间在前)。两个整数之间以空格隔开。 输入样例 3 3 2 5 2 8 2 输出样例 5 8 实习生小胖的百度网页过滤器( 2007 年初赛) 题目描述 百度网页采集器 (Baiduspider) 每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下: 1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重; 2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。 3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。 4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个 “ 有效 ” 好词,则只计算最长 “ 有效 ” 好词的权重,下一次匹配从这个最长 “ 有效 ” 好词末尾的下一个位置开始。 5. “ 无效 ” 好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。 现在小胖已经做好了第 1 步的工作,有一个好词和坏词的列表(词典),但是由于没有对中文文本处理的程序经验,他想请未来的百度之星们帮他完成这个程序。 输入格式 输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为 “ 词 空格 词的权重 ” 。权重为一个带符号 32 位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为 0 的词。 测试数据中的词全部为 1-5 个字的中文,但作为 “ 网页 ” 的字符串中同时包含中文和 ASCII 字符,每个汉字占 2 个字节。并非 “ 网页 ” 中的所有字都在词典中。 样例输入 小胖之喷火龙骑士 !! 小胖 6 喷火 -1 喷火龙 -1 火龙 -1 龙 4 龙骑 3 龙骑士 2 骑士 -2 士 3 输出格式 输出仅一行,为网页总权重(答案保证不超过带符号 32 位整数的范围)。 样例输出 7 样例解释 从 “ 网页 ” 中找到的好词为 “ 小胖 ” 和 “ 龙 ” ,坏词为 “ 喷火 ” 和 “ 骑士 ” 。特别要说明一下 “ 龙 ” 被识别为好词的原因 ——“ 喷火 ” 和 “ 喷火龙 ” 均为坏词,按正向最短匹配得到 “ 喷火 ” ,接着往下匹配到好词 “ 龙 ” 、 “ 龙骑 ” 和 “ 龙骑士 ” ,但是由于 “ 骑士 ” 是坏词,所以 “ 龙骑 ” 、 “ 龙骑士 ” 无效而 “ 龙 ” 是最长的有效好词。注意题目描述中的匹配规则,好词的 “ 有效 ” 和 “ 无效 ” 只考虑该好词的一部分与后续字是否能够组成坏词,而不考虑和前面的字是否能够组成坏词 —— 样例中的 “ 龙 ” 虽然可以与前面的字组成坏词 “ 喷火龙 ” 和 “ 火龙 ” ,但由于这两个词都是未能匹配成功的坏词,因此对好词 “ 龙 ” 的词性没有影响,可以累积 “ 龙 ” 的权重。 百度时间( 2007 年初赛) 题目描述 Baidu 的服务器上使用的不是北京时间,而是 Baidu 时间。 Baidu 时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从 2000 年 1 月 1 日 起的第几天。 现在就请大家设计一个程序将北京时间转换为百度时间。 输入格式 输入数据的每一行为一个待转化的北京时间,格式包括两种: 一种为: YYYY-MM-DD ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期); 另一种为: MM/DD/YYYY ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期); 不符合任何一种格式的输入视为非法输入。 输出格式 每个数据输出一行。如果格式正确,输出一个正整数,否则输出 Error 。 输入样例 2006-03-21 AStar2007 04/22/2007 输出样例 2149 Error 2463 SQL 中的 SELECT 语句( 2007 年初赛) 题目描述: SQL 中 SELECT 语句用于从数据库中查询记录。某个工程项目数据库中有一个表,表中满足某个条件的记录数要被频繁查询。查询表中满足某条件的记录数的 SELECT 语句如下: SELECT 记录数语句: “ SELECT COUNT(*) ” + “ ” + FROM 部分 + “ ” +WHERE 部分 或者 “ SELECT COUNT(*) ” + “ ” + FROM 部分 SELECT 记录语句: “ SELECT * ” + “ ” + FROM 部分 + “ ” +WHERE 部分 或者 “ SELECT * ” + “ ” + FROM 部分 TABLENAME : 基本单元 FROM 部分: “ FROM ” + “ ” +TABLENMAE 或者 “ FROM ( ” +SELECT 记录语句 + “ ) ” PROPERTY : 基本单元 VALUE : 基本单元 条件部分: PROPERTY + “ = ” +VALUE 或者 PROPERTY + “ = ” +VALUE+ “ ” + “ and ” + “ ” + 条件部分 WHERE 部分: “ WHERE ” + “ ” + 条件部分 基本单元:由大小写字母和数字字符( 0-9 )组成的长度不超过 10 的非空字符串 给定表中的所有记录,根据给定的 SELECT 记录数语句要求输出相应的结果(满足条件的总记录数)。 数据输入: 有多个测试例子: 每个测试例子:第一行两个整数 N ( 2 < N <= 1000 )和 M(0< M <= 10000) 分别表示数据库中表的记录数和查询次数;第二行是一个表名 (TABLENAME) ;第三行表中的 C 列属性名( PROPERTY )( 0 < C < 11 ),之间用空格隔开,列属性名各不相同;接下来 N 行,每行表示一个记录,有 C 个 VALUE ,之间用空格隔开;接下去有 M 行,每行一个 SELECT 记录数语句,每个 SELECT 记录数语句长度(包括空格)不超过 1000 ,输入数据保证每条 SELECT 记录数语句满足上面的定义,并且 SELECT 记录数语句中出现的表名和输入的表名一致。 数据输出: 每个测试例子输出 M 行每行一个整数表示 SELECT 语句输出的结果。 输入样例: 5 6 Book BookName Price PublishDate Author NBAsports 10 2004 dearboy SQL 20 2002 absorbed IntrotoAlgorithm 59 2002 Thomas MultipeView 60 2002 RichardHautley NBAsports 10 2004 dearboy SELECT COUNT(*) FROM Book WHERE BookName=NBAsports and Author=dearboy SELECT COUNT(*) FROM Book WHERE Price=20 SELECT COUNT(*) FROM Book WHERE Author=lala SELECT COUNT(*) FROM (SELECT * FROM Book WHERE BookName=NBAsports) SELECT COUNT(*) FROM (SELECT * FROM Book WHERE BookName=NBAsports) WHERE Price=20 SELECT COUNT(*) FROM Book 输出样例: 2 1 0 2 0 5 注意 :大量数据建议使用 scanf(), printf(),gets() 读写数据 繁忙的会议室预定问题( 2007 年初赛) 题目描述 百度由最开始的 7 人团队迅速发展为几千人的大团队,而工程师们经常需要在一起进行 “ 头脑风暴 ” ,这样会议室就成了紧缺资源。为了有效利用资源,大家决定制定规则, 自动安排会议室的使用。 为了公平起见,应按照申请时间从早到晚依次考虑,先到先得,且申请一旦被接受就不能取消。注意同一时间开的不同会议必须在不同的会议室,而同一个人不能同时参加两个会议。 输入格式 输入第一行为会议室总数 n 和请求总数 m ;第二行是 n 个整数,表示会议室能够容量的人数。以下 m 行每行是一个请求,按请求时间先后顺序排列(即应优先满足在输入中更早出现的请求)。 每个请求中第一个是整数,表示会议需要的时间长度(单位:小时);之后为与会人名单。人名由不超过四个汉字组成,用半角逗号分隔(每人名字固定且唯一,有重名的也在登记时区分开)。名单后的数字表示可以安排会议的时间,也以半角逗号分隔,如 10,11,14,15 表示第 10, 11, 14, 15 个小时可以开会(会议时间为 9 到 19 之间的正整数)。 输出格式 输出 m 个数,依次表示每个请求是否被接受。 1 表示接受, 0 表示不接受。 输入样例: 4 20 2 3 张三 , 李四 , 王五 10,11,12,14,15 1 张三 12 4 王六 , 王七 , 王八 , 王九 , 王十 9,10,11,12,13,14,15 2 张三 14,15 输出样例: 1 0 0 1 水果开会时段( 2007 年初赛) 题目描述; 每个百度工程师团队都有一笔还算丰裕的食品经费,足够每天购置多种水果。水果往往下午送达公司前台。前台的姐姐们只要看到同时出现五种或以上的水果,就称之为 “ 水果开会 ” 。 从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如 “ 小雪梨 ” 和 “ 大雪梨 ” 是同一种水果,而 “ 核桃 ” 和 “ 水蜜桃 ” 也被认为是同一种水果。尤其要指出的是,如果有三种水果 x, y, z 同时在前台出现,且 x 和 y 是同一种水果, y 和 z 也是同一种水果的时候, x 和 z 也被认为是同一种水果。现在前台的姐姐们想知道,今天是否有 “ 水果开会 ”—— 五种或更多的水果同时在前台出现。 输入格式 输入的第一行只有一个整数 n ,表示购置水果的组数。接下来的 n 行表示水果的到达时间、取走时间(时间用 1200 到 1900 之间的正整数表示,保证取走时间大于到达时间)。剩下的字符串以空格分割每一种水果。如 “ 1400 1600 雪梨 水蜜桃 ” ,表示下午两点到四点(包含两点和四点这两个时间点),雪梨和水蜜桃会在前台等待开会。每种水果名称由不超过十个汉字组成。 输出格式 输出仅一行,包含一个字符串 Yes 或 No ,分别表示今天水果开会与否。 输入样例 1 3 1200 1400 雪梨 柠檬 1300 1400 西瓜 苹果 1400 1800 花生 水蜜桃 输出样例 1 Yes 输入样例 2 3 1200 1400 雪梨 柠檬 1400 1500 哦 大梨 呀 1500 1800 咦 大梨 输出样例 2 No 大话西游与数字游戏( 2007 年初赛) 题目描述 “ 叉烧鸡翅膀,我呀最爱吃! ……” 百度 spider 组的 “ 黑龙潭之行 ” 在烤着鸡翅,唱着星爷的经典时达到高潮。大家在篝火旁围成一圈,开始玩 “ 数 7 ” 加强版游戏,规则如下: 规则 1 : 遇 7 的倍数或含 7 的数时 pass 。 规则 2 : 遇有包含相同数字的数时 pass 。注意相同数字不必相邻。例如 121 。 数错的惩罚很残酷 —— 吞食烤全羊。为避免惩罚,百度工程师们需要你 —— 史上最强程序员的帮助。百度工程师想知道: req1 x :符合规则 1 的第 x 个数是什么? req2 y :符合规则 2 的第 y 个数是什么? req12 z :同时符合规则 1 、 2 的第 z 个数是什么? query n :数 n 是规则 1 中的第几个数,是规则 2 中的第几个数? 输入格式 输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为 req1 、 req2 、 req12 、 query (区分大小写)。 输出格式 前三种查询输出一个无符号整型的解。对于 “ query n ” 的查询,若 n 是规则中的数则输出相应的解,否则输出 -1 。 输入样例 req1 10 req2 10 req12 10 query 14 输出样例 11 10 12 -1 13 补充说明 输入数据共分五组,前四组中: 1<=x<=10000000,1<=y<1000000,1<=z<250000, 1<=n<24000000. ;第五组中的 y 可能达到 5000000 2007年百度之星程序设计大赛试题复赛题目 好心的出租车司机 题目描述 北京的一位出租车司机向你抱怨:城市发展太快,公路越来越多,他已经疲于计算行驶路线,于是求助你开发一个自动导航的工具。 出租车只能在公路上行驶。所有的公路都是笔直、双向的,相交的公路视为连通(可以在交叉点处从一条公路开到另一公路上)。由于道路施工,整个城市的公路系统可能并不完全通畅。如果乘客的目的地不在公路边,则乘客下车后要步行前往,步行路线不受公路限制。这位好心的司机还特别提出,乘客步行距离越短越好;其次,出租车行驶里程越短越好。 方便起见,用笛卡尔坐标系来描述城市地图,所有坐标都在第一象限 [0, 1000] 的范围内。公路宽度忽略不计。 输入格式 第一行是一个数字 k ,代表公路条数。以下 k 行每行用 4 个实数描述一条公路(用空格隔开),前两个表示公路起点,后两个表示公路终点。下一行包含 4 个实数(用空格隔开),前两个表示乘客上车点,后两个表示乘客目的地坐标。不相交公路间的最短距离至少为 10 -4 。 输出格式 仅一行,为出租车行驶的里程数,保留一位小数。 输出格式 2 2.0 2.0 10.0 10.0 10.0 2.0 2.0 10.0 3.0 3.0 9.0 4.0 输出样例 7.8 评分方法 本题有 20 组数据,满足 k<=100, 公路的交点数不超过 10000 。 Robots.txt 协议 题目描述 搜索引擎是靠 Web Robot (又称 Spider )来收集互联网上浩如烟海的网页的。 Spider 就像一个旅行家一般,不知疲倦地奔波于万维网的空间,将遇到的页面收集下来供搜索引擎索引。对于一个网站的管理员来说,如果希望搜索引擎只收录自己指定的内容,或者指定某些不希望搜索引擎访问的内容,该如何去做呢?他需要的就是 Robots Exclusion Protocol 协议,这里简单的称它做 Robots.txt 协议。 Robots.txt 是一个放置在网站根目录下的纯文本文件。举例来说,当 Spider 访问一个网站(比如 http://www.example.com )时,首先会检查该网站中是否存在 http://www. example.com/robots.txt 这个文件,如果 Spider 找到这个文件,它就会根据这个文件的内容,来确定它访问权限的范围。 www.robotstxt.org 是 robots.txt 协议的 Home Page ,在这个站点上你可以找到很多 robots.txt 协议相关的资料。 Robots.txt 协议在 http://www.robotstxt.org/wc/norobots.html 上有比较详尽的描述。 你的任务就是编写 Spider 中的一个逻辑单元,这个单元的作用就是来判断一个网站的一些 URL 是否被禁止抓取。对方网站的站点在这里假设是 www.example.com ,这个 Spider 的 User-agent 当然是 Baiduspider 。注意,这个逻辑单元除了本身的判断逻辑要求与 robots.txt 协议一致外,还要注意容错的问题。互联网上纷繁芜杂,会出现很多意想不到的错误。如何能够对一个对错参半的 robots.txt 进行解析,把其中正确的挑拣出来、把错误的部分忽略掉,也是一个不小的挑战哦。都会遇到什么错误?在开始爬行互联网之前,谁都不知道。 输入格式 第一行是一个正整数 m ,表示 robots.txt 文件的行数,后面跟 m 行,是 robots.txt 的全文。下一行包含一个正整数 n , 表示 URL 的行数,后面跟 n 行 URL ,这个就是你要判断的 URL 的列表。 输出格式 每条 URL 输出一行,每行两列,第一列是一个数字,如果这条 URL 被禁止,则输出 0 ,否则输出 1 。第二列是这条 URL 本身。 输入样例 2 User-agent: * Disallow: /tmp/ 2 http://www.example.com/index.html http://www.example.com/tmp/somepage.html 输出样例 1 http://www.example.com/index.html 0 http://www.example.com/tmp/somepage.html 评分方法 本题包含 20 组数据,均满足 0<=n,m<=100 。 简单印象 题目描述 简单、可依赖是百度的性格,百度之星们又有怎样的性格呢? 有 n 名选手入围了百度之星程序设计大赛的复赛阶段。为了让选手相互之间有更多的了解和更好的交流,组委会工作人员邀请每位选手选择一些不同的词语来介绍自己的性格。每名选手需要为自己选定的每一个词语指定一个绝对值不超过 100 的整数权值 q ,表示这个词语在多大程度上描述了自己的性格。例如“美丽 90 ”表示该选手认为自己非常美丽,而“冷淡 -60 ” 表示比较热情,而“外向 -5 ” 表示稍微有一点点偏内向。你不需要考虑词语本身的语义,比如“外向 -5 ” 不代表“内向 5 ”。 组委会发现不少选手的性格都有相似之处,所以希望找到一组词语尽量准确的描述所有的选手。对于选出的词语集合 S ,定义选手 i 被描述的精确程度 P(i) 为 S 中所有词语在选手 i 眼中的权值之和(选手 i 没有提到的词权值视为 0 ),组委会希望让最小的 P(i) 尽量大,因为这样才能让选出的词语能够描述所有选手,而不仅仅是部分。 另外,所选词语的个数也是有讲究的。词语太少会略显单薄,而词语太多又不方便宣传,所以组委会设定了词语个数的最小值 min 和最大值 max 。 输入数据 输入数据第一行为三个整数 n, min 和 max ,表示选手的个数、词语的最小值和最大值,接下来的 n 行,每行包括若干“词语 - 权值”对。词语保证由不超过 10 个汉字组成(用 GBK 编码,不含非汉字),权值为绝对值不超过 100 的整数。 输出数据 仅一行,输出各个词语,用空格隔开。次数总数必须不小于 min 且不大于 max ,每个词语都必须至少被一个选手提到过,否则视为非法输出。 输入样例 3 2 4 美丽 90 冷淡 -60 外向 -5 乐观 20 美丽 10 冷淡 20 外向 20 乐观 -5 输出样例 美丽 冷淡 外向 样例解释 如果把选手按照输入中出现的顺序编号为 1~3 ,则 P(1)=90-60-5=25 , P(2)=10+20=30 , P(3)=20 ,所有 P 中的最小值为 20 。 评分方法 本题包含 30 个测试点,每个测试点 10 分,共 300 分。 测试点 1~10 满足 n<=100, 1<=min<=max<=5, 涉及到的词语不超过 500 个。 测试点 11~20 满足 n<=200, 10<=min<=max<=15, 涉及到的词语不超过 2000 个。 测试点 21~30 满足 n<=400, 25<=min<=max<=30, 涉及到的词语不超过 10000 个。 每个测试点独立评分。对于每个测试点,非法输出的得分为 0 ,合法输出的得分大于 0 。设合法输出的程序数为 M ,比程序 i 的方案严格更优的程序数为 Y(i) ,则该测试点程序 i 的分值为 10(1-Y(i)/M) 。换句话说,输出该测试点最优解的程序将获得 10 分,而最差解惟一的情况,输出最差解(但合法)的选手将得到 10/M 分。注意:每个测试点的得分不必为整数。 紧急修复 背景 2050 年的一天,某市 k 家公司的计算机系统突然同时瘫痪。市政府很快找到了问题的所在,并开始研发一套自动修复整个城市的系统。自动修复系统启用后整个城市的计算机系统将恢复正常,但由于研发时间较长,在此之前各公司仍将蒙受不小的损失。为此,市政府决定派出 n 支维修能力相同的维修队到各公司进行手工修复,力图在自动修复系统启用前整个城市的总损失达到最小。 参数 城市被划分成 R*C 的网格,各行从上到下编号为 1~R ,各列从左到右编号为 1~C 。每个格子为空地、障碍物和建筑物之一(公司总是位于某个建筑物格子中)。维修队每次只能往上(行编号减 1 )、下(行编号加 1 )、左(列编号减 1 )、右(列编号加 1 )四个方向移动,第 i 个维修队每个小时可以移动 s(i) 格。维修队在任何时候都不能位于障碍物中,但建筑物可以从它上下左右的相邻空地进入,也可以从这些格子出去。注意:不能直接从一个建筑物格移动到另一个建筑物格,而必须先移动到相邻的空地,在空地上移动,然后再进入另一个建筑物。每个格子的实际尺寸很大,因此可以有多个维修队同时在同一个格子中。 第 i 家公司的位置为 (r(i), c(i)) ,瘫痪程度为 B(i) ,每小时的经济损失为 P(i) 元。瘫痪程度的单位是“队·小时”,即一支维修队每小时可以把一个公司的瘫痪程度降低 1 ,而如果 m 支维修队同时为一个公司修复,每小时可以把该公司的瘫痪程度降低 m 。 注意,在完全修复之前,每个小时的经济损失不变。 修复计划 政府的修复计划应包含每个小时各维修队所执行的命令。这些命令包括: 1. REST 该命令不进行任何操作。 2. MOVE 按照 seq 进行移动。其中 seq 为一个长度不超过 s 的非空字符串(如果不需要移动,请使用 REST 命令)。如果 seq 的长度超过 s ,则从第 s+1 个字符开始的剩余部分将被删除;如果该命令不能完全成功的执行,则从第一个非法移动开始的所有后续移动将被忽略。 3. REPAIR 对当前公司进行维修。如果当前公司已经修复或者当前位置不是公司,该命令将被忽略。该命令后面加的所有参数将被忽略。 需要注意的是,每个小时只能执行一条指令,例如不能在 MOVE 之后立刻 REPAIR ,必须等待下一个小时。 输入格式 输入的第一行为三个正整数 R, C, T 即网格的行数、列数和自动修复系统的启用时间。以下 R 行每行 C 个字符,表示该城市的地图。点表示空地, # 表示障碍物, O 表示建筑物。 下一行包含一个正整数 k ,表示公司的数目。以下 k 行每行四个整数 r, c, B, P ,其中 (r,c) 表示该公司坐标 (1<=r<=R, 1<=c<=C) , B 为该公司的初始瘫痪程度, P 为每小时的经济损失。 (r,c) 处保证为一个建筑物格。 B 和 P 保证大于 0 。 下一行包含两个正整数 n, s ,表示维修队的个数和每小时最多移动的格子数。以下 n 行每行包含两个整数 r, c ,表示该维修队的初始位置。维修队按照输入文件中的顺序编号为 1~n 。 输出格式 输出每 n 行为一组,描述一个小时各维修队的发出的命令。共 T 组,一共 nT 行。所有格式非法的指令将被忽略(等效于 REST )。尽管如此,如果程序输出的命令中没有 REPAIR ,或者所有的 REPAIR 都没有成功执行,则输出将视为非法。 输入样例 4 7 5 ...#O## #.....# O...##O #...... 2 1 5 3 5 3 7 4 6 3 4 7 5 1 1 5 3 1 5 输出样例 MOVE U MOVE RRRD MOVE RDRURD REPAIR MOVE DRRU MOVE DRRRU REPAIR REPAIR REPAIR REPAIR REPAIR MOVE D REST REST REPAIR 模拟器 每小时的模拟过程如下: 第一步: 对于每个尚未修复的公司 i ,将 P(i) 累加进总损失。 第二步: 按照序列从小到大的顺序依次执行各维修队的指令。 为了更清晰的说明规则并帮助选手设计和测试程序,命题组开发了一个简单的 模拟器 。该模拟器根据输入数据和程序输出进行模拟,给出详细模拟过程,以及最后的结果。最终的测试将严格按照该脚本的输出进行评判。 模拟器用 python 编写,没有安装 python 的选手可以在 http://www.python.org 下载最新版本。 评分方法 本题包含 30 个测试点,每个测试点 10 分,共 300 分。 测试点 1~10 满足 R, C<=10, n<=5, k<=10, B<=15, T<=30 测试点 11~20 满足 R, C<=30, n<=10, k<=20, B<=50, T<=500 测试点 21~30 满足 R, C<=100, n,<=100, k<=500, B<=1000, T<=10000 每个测试点独立评分。对于每个测试点,非法输出的得分为 0 ,合法输出的得分大于 0 。设合法输出的程序数为 M ,比程序 i 的方案严格更优的程序数为 Y(i) ,则该测试点程序 i 的分值为 10(1-Y(i)/M) 。换句话说,输出该测试点最优解的程序将获得 10 分,而最差解惟一的情况,输出最差解(但合法)的选手将得到 10/M 分。注意:每个测试点的得分不必为整数。 赛事规则 赛事将在 2008 年 5 月 5 日 开始接受报名注册,至 2008 年 5 月 30 日 晚 24 时注册截止。整个赛事包括网络资格赛(初赛)、网络晋级赛(复赛)和现场总决赛。 语言及运行环境 编程语言 标准 ANSI C , C++ 开发及运行环境 竞赛的评分工作在 Linux+Gcc 环境下进行。评分以赛手提交的源码在此环境下的编译运行结果为准。 网络资格赛(初赛)和晋级赛(复赛)时,赛手可以在自己的计算机上使用任何自己熟悉的开发调试软件和工具,进行代码开发和调试工作。完成后,赛手可以在线提交源码(百度提供在线 Linux+Gcc 编译环境),得到编译程序的输出信息。 赛事流程 赛前特别提示 请用所熟悉的 IDE 或开发环境编译调试程序,通过后再提交编译;在比赛时间结束前,关闭比赛页面后可以重新登录,答题时间按自然时间计算,资格赛(初赛)不超过 2 小时,晋级赛(复赛)不超过 8 小时,不因中断答题、关闭页面而停止计时。 网络资格赛(初赛) 资格赛时间是2008年5月31日17:00-22:30和6月1日14:00-17:30。 网络晋级赛(复赛) 将于北京时间2008年6月14日开放。 现场总决赛 将通过邮件和电话形式与获得总决赛资格的赛手进行确认,并通知总决赛的确切时间和详细安排,总决赛时间暂定为2008年7月中上旬。 我们为每位决赛赛手免费提供旅行膳宿,妥善安排往返机场及比赛现场的接送,并为每位赛手购买总决赛期间的人身意外伤害保险。 评分及晋级规则 竞赛评分 所有评分工作在 Linux+Gcc 环境下进行。主要由系统自动评分,加上少量人工核查。 评分将在线竞赛结束后开始,一周内完成。 评分结束后,竞赛者可以登录自己的账号,在线查询自己的得分。 评分标准 竞赛中的每道题目后都附有评分标准。赛手的总分为各道题目得分之和。出现以下情况,该题目不得分: 如提交的程序代码编译不能通过或不能运行,不得分; 程序运行不能在 10 秒钟内运行结束,不得分; 发现马甲、有作弊行为者,不得分并取消竞赛资格; 晋级规则 参加下一轮比赛的赛手以比赛得分从高到低进行筛选; 网络资格赛(初赛)分为两场,每场前 200 名进入网络晋级赛(复赛); 若选手同时参加两场网络资格赛(初赛),按其最优成绩计算,另一场成绩将被取消,按照成绩依次由后面选手顶替; 在总分相同的情况下,将参考以下因素: 1 、完成比赛的时间先后,即提交代码时距离比赛开始的时间; 2 、程序运行效率。 奖项设置 一等奖 1 名 ――15000 元 人民币; 二等奖 3 名 ――6000 元 人民币; 三等奖 5 名 ――3000 元 人民币; 晋级奖 —— 大赛珍藏版 T 恤和 08 年特别版 “ 度度熊 ” 一只; 参与奖 ―― 所有入围复赛的赛手都将获得大赛限量纪念版 T 恤一件。 报名和参赛资格 参赛报名 开始时间 ―― 2008 年 5 月 5 日; 截止时间 ―― 2008 年 5 月 30 日 (晚 24 时结束); 注:每人只能注册一次,填写信息完整准确。 参赛要求与资格 由赛手个人独立完成全部题目,无任何作弊和欺诈行为。 除百度现职员工、现职实习生和命题委员会成员外都有资格注册参赛,无报名费用。 解释权 大赛解释权归百度公司大赛组委会,竞赛规则如有变更我们会及时通知。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ]
1 人已下载

下载文档

相关文档