Astar2007百度之星程序设计大赛网络资格赛

galois_godel 2007-05-28 07:31:35
加精
第一场

1.水果开会时段
每个百度工程师团队都有一笔还算丰裕的食品经费,足够每天购置多种水果。水果往往下午送达公司前台。前台的姐姐们只要看到同时出现五种或以上的水果,就称之为“水果开会”。

从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如“小雪梨”和“大雪梨”是同一种水果,而“核桃”和“水蜜桃”也被认为是同一种水果。尤其要指出的是,如果有三种水果x, y, z同时在前台出现,且x和y是同一种水果,y和z也是同一种水果的时候,x和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

样例解释
在样例1中,时刻1400有六种水果在前台;在样例2中,由于雪梨和大梨在任何时刻都是同一种水果,最多只有四种水果同时在前台。

评分规则

1程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;

2要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

3该题共有10个测试数据集,每组数据均满足n<=10,每个时段最多有10个水果,一共不超过50个水果;

4该题目20分。
...全文
1569 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlt332397483 2008-11-06
  • 打赏
  • 举报
回复
学习……
赵Andy 2008-11-04
  • 打赏
  • 举报
回复
mark
SenerityChzr 2008-08-21
  • 打赏
  • 举报
回复
mark
shdongsichyang 2008-08-02
  • 打赏
  • 举报
回复
mk
mooninday 2007-11-02
  • 打赏
  • 举报
回复
MARK
坚持自己 2007-10-27
  • 打赏
  • 举报
回复
mark
cbweixin 2007-07-12
  • 打赏
  • 举报
回复
我也看看
ReverseEngineering 2007-06-21
  • 打赏
  • 举报
回复
看看
heixia108 2007-06-11
  • 打赏
  • 举报
回复
学习。。
expter 2007-06-10
  • 打赏
  • 举报
回复
LZ 做了几道啊?
galois_godel 2007-06-10
  • 打赏
  • 举报
回复

3. 简单印象
简单、可依赖是百度的性格,百度之星们又有怎样的性格呢?

有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。

注意事项
输入数据的中文采用GBK编码。
GBK:是又一个汉字编码标准,全称《汉字内码扩展规范》。采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,排除xx7F。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

本题包含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分。注意:每个测试点的得分不一定为整数。


4. 紧急修复
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进行移动。其中seq为一个长度不超过s(i)的非空字符串(如果不需要移动,请使用REST命令)。如果seq的长度超过s(i),则从第s(i)+1个字符开始的剩余部分将被删除;如果该命令不能完全成功的执行,则从第一个非法移动开始的所有后续移动将被忽略。 seq的取值范围为:U,D,L,R。分别表示上、下、左、右。字符区分大小写, 其他字符视为非法。


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均为正整数,且P不超过200。 下一行包含一个正整数n,表示维修队的个数。以下n行每行包含三个整数r, c, s,(r,c)表示该维修队的初始位置, s表示它每小时最多移动的格子数。维修队按照输入文件中的顺序编号为1~n。


输出格式
输出每n行为一组,描述一个小时各维修队的发出的命令。共T组,一共n*T行。所有格式非法的指令将被忽略(等效于REST)。尽管如此,如果程序输出不足n*T行,或者命令中没有REPAIR,或者所有的REPAIR都没有成功执行,则输出将视为非法。你的程序不必输出最优解,任何一个合法解都将得到一定的分数。


输入样例 例
4 7 5
...#OO#
#.....#
O...##O
#......
2
1 5 1 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
MOVE DRUL
REPAIR
SLEEP
REPAIR
REST


模拟器


为了更清晰的说明规则并帮助选手设计和测试程序,命题组开发了一个简单的模拟器。该模拟器根据输入数据和程序输出进行模拟,并给出详细过程和最后的结果。最终的测试将严格按照该脚本的输出进行评判。你可以用它测试样例输入和输出,或者自己设计的其他数据。模拟器将会对各条非法指令给出警告信息(例如非法的移动,无法识别的指令等)。
每小时的模拟过程如下:
第一步:对于每个尚未修复的公司i,将P(i)累加进总损失。
第二步:按照序列从小到大的顺序依次执行各维修队的指令。


模拟器用python编写,没有安装python的选手可以在http://www.python.org下载最新版本。


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

本题包含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分。注意:每个测试点的得分不一定为整数。
galois_godel 2007-06-10
  • 打赏
  • 举报
回复
复赛题目

1. 好心的出租车司机
北京的一位出租车司机向你抱怨:城市发展太快,公路越来越多,他已经疲于计算行驶路线,于是求助你开发一个自动导航的工具。
出租车只能在公路上行驶。所有的公路都是笔直、双向的,相交的公路视为连通(可以在交叉点处从一条公路开到另一公路上)。由于道路施工,整个城市的公路系统可能并不完全通畅。如果乘客的目的地不在公路边,则乘客下车后要步行前往,步行路线不受公路限制。这位好心的司机还特别提出,乘客步行距离越短越好;其次,出租车行驶里程越短越好。
方便起见,用笛卡儿坐标系来描述城市地图,所有坐标都在第一象限[0, 10000]的范围内。公路宽度忽略不计。


输入格式
第一行是一个正整数k,代表公路条数。以下k行每行用4个非负整数描述一条公路(用空格隔开),前两个表示公路起点的坐标,后两个表示公路终点的坐标。下一行包含4个非负整数(用空格隔开),前两个表示乘客出发点(保证在某条公路上),后两个表示乘客目的地坐标。乘客必须在出发点上车,中途不换车。任意两条公路最多只有一个公共点。

输出格式
仅一行,为出租车行驶的里程数,保留一位小数(四舍五入)。

输入样例 例
2
2 2 10 10
10 2 2 10
3 3 9 4


输出样例 例
7.8


2. 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找到这个文件,它就会根据这个文件的内容,来确定它访问权限的范围。

http://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进行解析,把其中正确的挑拣出来、把错误的部分忽略掉,也是一个不小的挑战哦。都会遇到什么错误?在开始爬行互联网之前,谁都不知道。在本题中,你的程序应当逐一对robots.txt的各行进行处理,忽略所有格式错误或者非期望的行。

输入格式
第一行是一个非负整数m,表示robots.txt文件的行数,后面跟m行,是robots.txt的全文。下一行包含一个非负整数n, 表示URL的行数,后面跟n行URL,这个就是你要判断的URL的列表。robot.txt中可能有错误,但所有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
galois_godel 2007-06-02
  • 打赏
  • 举报
回复
比赛点评
http://star.baidu.com/main/analysis1.html
初赛第一场点评
本场的四道题目分别涉及到字符串处理、无向图的连通分量、进位值、组合计数、排列生成、二分查找、回溯法、倒排与索引等数据结构与算法,编码时间比较紧张,需要选手根据自己的情况选择合适的题目。

第一题

本题考查对输入的处理、二元关系的理解和简化问题的能力。本题有很多人得满分,但不少选手花费了大量的时间,导致没空再做其他题目了。
算法梗概:枚举输入中出现的所有时间,统计该时间出现的水果所组成无向图的连通分量。规模很小,可以直接遍历,也可用并查集实现。输入时可以一行一行输入,也可以直接用scanf("%s")依次处理各个token,以数字串开头时意味着新行的开始。如果代码精练的话,是可以在1k之内完成本题的,并没有像很多选手想象的那样麻烦。
易错点:题目中给出的二元关系随时间而变化。最稳妥的方法是对于每个时间点重新计算一遍,否则可能会出错

第二题

这是一道数学味道比较浓的题目,可以用多种方法解决。虽然取得一半分数(一个一个数)并不困难,但要在短时间内通过所有数据并不容易。仅有6位选手获得满分。
算法梗概:题目中给出的规模虽然不算很小,但也不算大。事先把所有满足数据限制的三类数(规则1、规则2、规则1+2)生成出来并存放在表中,用二分查找回答query即可。本题也可以使用递推,但是相比之下思维难度较大。生成第一类数时不要一个一个数,比如当数到700000发现出现数字7时应直接加上100000而不是1。生成第二类数可以直接用经典的排列生成算法,或者递归枚举。第三类数可以用类似有序表归并的方法,或者直接使用STL中集合交的算法。
易错点:按规则一个一个的数,导致后5个点严重超时。

第三题

这是一道实际问题,约束比较多,很难找到多项式级别的算法。所有选手中仅有两位获得满分30分,三位28分。
算法梗概:首先预处理得到每个请求涉及到的人,以及该会议可能的开始时间和会议室,然后递归搜索
易错点:尝试用贪心法,导致结果错误。

第四题

本题是第一场比赛中最难的一道,也是最灵活的一道。它的背景是数据库中的SQL查询处理,但是由于表和查询的特殊性,可以有更多的有针对性的处理方法。例如,由于语句总是合法的,而且WHERE子句的条件只用逻辑与连接,我们可以简单的查找等号,并处理它所在的token即可,大大的降低了输入处理的复杂程度。即使采取高效的算法(而不是逐一匹配),也不难把代码量控制在2k以内。本题的提交并不算少,但仅有三位选手获得满分。绝大多数程序由于时间效率太低而只获得了很少的分数。
算法梗概:通常的处理方法是对表进行预处理,例如增加索引:按照某个主关键字给各条记录排序,在查询时首先根据主关键字的值把查询范围缩小,然后在该范围内依次判断是否符合查询。考虑到查询的多样性,可以对每个field做一个索引,然后在查询中选一个合适的field作为主关键字。更复杂的思路是做多级索引,但索引本身的规模和生成的时间将迅速增加,选手需要在索引数量和质量上做一个权衡,甚至可以借鉴机器学习中ID3分类算法的思想,根据不同field的“分类”能力来创建分类树。当然,若只是为了通过测试用例,可以简单的用预处理保存所有可能查询所对应的结果,则每次查询处理的时间接近于常数级。本题的各种尝试和实验对算法设计、实现能力的提高都很有帮助,渴望提高算法水平的选手可以试一试。
易错点:不重视算法的时间复杂度,导致大量超时。


http://star.baidu.com/main/analysis2.html

初赛第二场点评
和第一场题目相比,第二场的梯度更加明显:前两题比第一场简单,而后两题比第一场困难。

第一题

本题考查对时间的处理和错误情况的识别,选手在编码时需要格外仔细。重视细节是程序员和工程师所应具备的必要素质——忽视细节可能导致全盘皆输。本题看起来有点麻烦,但如果使用一些简化问题的处理技巧,不难把代码控制在1k以内。本题有很多选手获得满分。
算法梗概:先判断格式是否合法,然后提取出年、月、日的信息进行计算。
易错点:
1. 没有判断是否严格遵守格式,例如2000-1-1、2000-1-001(位数不对)、2000-01/01(分隔符不对)、2000-01-01a(多余字符)都是错误的。
2. 没有判断日期是否存在,例如0月1日,1月0日,99月1日,2月30日,平年的2月29日等。
本题的测试用例中没有2000年前的合法日期。

第二题

本题要求从文本中提炼出信息,重点考查对规则的理解和分析能力、基本的字符串处理能力、汉字GBK编码的处理能力。本题有7位选手获得满分。
算法梗概:首先挑出所有坏词,然后再剩余的文本里挑出好词。由于词典中的词最多只包含5个汉字,Hash或者trie都是效果理想而又易于实现的数据结构;过度、不合理的使用STL中的容器很容易导致超时。
易错点:
1. 中英文混合处理的bug。没有注意这个问题的选手可以自己试一下是否会从"页苑估"和"A怀苑拱"这两个串中"成功"的找出"吃饭"这个词。
2. 规则理解错误。好词的任何一部分是坏词时都将被认为无效。如果对这一规则不能很好的理解,则设计出的算法很可能是错误的。
3. 时间效率不够高。本题的最后三组数据规模较大,不仅朴素的算法将无法奏效,理论时间复杂度低但常数过大的算法也将超时。

第三题

本题可以体现选手的算法修养,需要选手有一定的分析问题、设计算法的能力。很容易想到一些错误的贪心法,或者觉得可以用动态规划求解,因此需要选手自己对设计出的算法进行正确性和复杂度的评价,或者进行试验比较。当确定用搜索法解决问题之后,还要深入分析问题,找出合理的搜索对象、顺序和可能的优化手段。匆忙设计算法而不考虑细节很可能会超时或者错误。本题没有选手获得满分,最高分为26分,共24位选手的得分不小于20分。
算法梗概:题目的本质是把电池分成四堆,在满足一定条件的情况下让最小堆的总电量最小或最大。用搜索算法解决,注意需要设计合理的搜索对象和顺序,以及有效的剪枝条件。一个比较好的方法是规定每堆电池的电量按从小到大排序,并且按照电量从小到大的顺序搜索各堆。
易错点:
1. 很容易设计出错误的贪心法。测试用例的设计时考虑了各种可能的贪心法,让它们都能得到一定的分数但又不能得到满分
2. 深入分析问题之前匆忙设计搜索算法的细节,导致超时。

第四题

本题是百度之星初赛的8道题目中最难的一道,难在大数据量的处理。海量数据的处理是搜索引擎的一大特征,本题旨在给选手一个最粗浅的认识。本题没有选手获得满分,最高分为25分,另外有一位选手获得20分,大多数选手只通过了1到2个测试点,其余的严重超时。
算法梗概:首先需要从输入中分离出所需要的信息,比如查询的site和inurl两个部分,以及每个url所对应的站点。接下来有三种选择。
方案A:用尽量短的时间写一个正确的程序,以得到一定的分数(这样的技巧在实际的项目中做prototype时也可以采用)。一种可行的方法是为每个site创建一个查询集合(用STL中的set实现),然后对于每条url中依次判断是否满足各条查询。合理的使用STL强大的功能不难把代码控制在1k以内,并通过两个测试点。
方案B:仍然为每个site创建一个查询集合,但是用trie实现该集合。这样,每次处理一条url时从每个位置出发用trie进行模式匹配,相当于单模式串的朴素模式匹配。由于本题选择的数据来源于真实数据,这种方法的效果非常理想。
方案C:对字符串算法略有了解的选手应该听说过多模式串的匹配算法,如Aho-Corasick, Wu-Manber和Boyer-Moore。使用这些算法可以得到理论时间复杂度更低的解法,但相应的,对选手的算法修养提出了更高的要求。本题并不要求选手掌握或是实现这些算法,在这里提出仅仅是希望借此机会和广大编程爱好者分享一条切身体会:表面平凡的东西也可以艰深无比,学无止境。
易错点:
1. 没有注意程序的时间复杂度,导致大量超时。
2. 注意inurl是指的在url中,而不是在"url中除了site的其他部分"。所以对于url为"http"的查询,相应site的所有url都符合。考虑到这个细节并不是本题考查的重点,只有一个规模较大的测试用例包含了这种情况,不影响绝大多数选手的成绩。

xuelong_zl 2007-05-31
  • 打赏
  • 举报
回复
只能看了......#-_-
hertz2007 2007-05-30
  • 打赏
  • 举报
回复
详细的可以参考
http://bbs.tju.edu.cn/TJUBBSDGBFDIAXLSZNWUYYHNGDCTLSHYLEVTTAB_A/
hertz2007 2007-05-30
  • 打赏
  • 举报
回复
评论第5题:
主要是对输入字符串有效性的判断。
主要是对‘-’和‘/’的情况进行讨论。
然后是讨论闰年问题。
bigc2000 2007-05-28
  • 打赏
  • 举报
回复
我太菜了,不与评论。
galois_godel 2007-05-28
  • 打赏
  • 举报
回复
第二场

1.百度时间
Baidu的服务器上使用的不是北京时间,而是Baidu时间。Baidu时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从2000年1月1日开始经过了几天。

现在就请大家设计一个程序将北京时间转换为百度时间。在本题中,闰年的年份是400的倍数,或者是4的倍数但不是100的倍数。比如2000和8888均为闰年,但6100不是。


输入格式
输入数据的每一行为一个待转化的北京时间(不含空格和TAB),正确的格式包括两种:
一种为:YYYY-MM-DD,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
另一种为:MM/DD/YYYY,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);


输出格式
每个数据输出一行。如果可以成功转换,输出一个正整数,否则输出Error。

输入样例 例
2000-01-01
AStar2007
05/26/2007


输出样例 例
0
Error
2702


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

该题共有5个测试数据集,数据1和数据2中的所有日期均能成功转换。所有数据中,每行不超过20个字符,每组数据最多包含100行;

该题目20分。

2.实习生小胖的百度网页过滤器
百度网页采集器(Baiduspider)每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下:
1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重;
2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。
3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。
4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个“有效”好词,则只计算最长“有效”好词的权重,下一次匹配从这个最长“有效”好词末尾的下一个位置开始。
5. “无效”好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。


现在小胖已经做好了第1步的工作,有一个好词和坏词的列表(词典),但是由于没有对中文文本处理的程序经验,他想请未来的百度之星们帮他完成这个程序。


输入格式
输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为“词 空格 词的权重”。权重为一个带符号32位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为0的词。
作为“网页”的字符串中同时包含中文和ASCII字符,每个汉字占2个字节。并非“网页”中的所有字都在词典中。


输出格式
输出仅一行,为网页总权重(答案保证不超过带符号32位整数的范围)。

样例输入 例
小胖之喷火龙骑士!!
小胖 6
喷火 -1
喷火龙 -1
火龙 -1
龙 4
龙骑 3
龙骑士 2
骑士 -2
士 3


样例输出 例
7

样例解释
从“网页”中找到的好词为“小胖”和“龙”,坏词为“喷火”和“骑士”。特别要说明一下“龙”被识别为好词的原因——“喷火”和“喷火龙”均为坏词,按正向最短匹配得到“喷火”,接着往下匹配到好词“龙”、“龙骑”和“龙骑士”,但是由于“骑士”是坏词,所以“龙骑”、“龙骑士”无效而“龙”是最长的有效好词。注意题目描述中的匹配规则,好词的“有效”和“无效”只考虑该好词的一部分与后续字是否能够组成坏词,而不考虑和前面的字是否能够组成坏词——样例中的“龙”虽然可以与前面的字组成坏词“喷火龙”和“火龙”,但由于这两个词都是未能匹配成功的坏词,因此对好词“龙”的词性没有影响,可以累积“龙”的权重。

注意事项
输入数据的中文采用GBK编码。
GBK:是又一个汉字编码标准,全称《汉字内码扩展规范》。采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,排除xx7F。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

该题共有10个测试数据集,前7组数据的大小不超过1K字节,数据8和数据9不超过600K字节,数据10的网页正文不超过1M字节。所有数据的词典不超过50,000项,且词典中的词保证由1到5个汉字组成。词典不包含重复的单词;

该题目20分。


3.Wii游戏开始啦!
为了在紧张的上班时间让员工们轻松些,百度休息室里放置着按摩椅、CD、高尔夫套装和Wii游戏机等休闲用品。其中最受欢迎的当然是游戏机。

Wii游戏机有两个手柄,每个手柄使用两节电池(这两个电池可以是不同的品牌),其中至少一块电池没电时该手柄没电。

工程师们在玩游戏时,总是用最简单的方式更换电池:有手柄没电时把所有没电的电池拿走,一一换上新电池即可(有电的电池总是继续使用)。当有手柄没电且没有新电池可用时才停止玩Wii。

告诉你每个品牌电池的使用时间以及该品牌电池的个数,请计算工程师们玩游戏时间的最小值和最大值。


输入格式
输入第一行为一个正整数n,表示电池的种数。接下来n行,每行两个整数L和F,表示使用时间为L的电池有F个(电池不必成对出现,即F可以是奇数)。

输出格式
输出仅一行,包含两个整数,分别表示工程师们的最短游戏时间和最长游戏时间(短的时间在前)。两个整数之间以空格隔开。

输入样例 例
3
3 2
5 2
8 2


输出样例 例
5 8


样例解释
有三对电池,使用时间分别为3小时、5小时和8小时。
方案1:一开始给手柄1使用一对3小时的电池,给手柄2使用一对5小时的电池,则3小时后手柄1没电,换上一对8小时的。再过2小时后,手柄2没电。此时已经没有电池可用了。总时间为5小时。
方案2:一开始给手柄1使用一对8小时的电池,给手柄2使用一对5小时的电池,则5小时后手柄2没电,换上一对3小时的。再过3小时后,手柄1和手柄2同时没电。此时已经没有电池可用了。总时间为8小时。


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

该题共有15个测试数据集,均满足n<=10, L<=200, F的总和不超过30;

该题目30分。

4.百度的高级搜索方法
你尝试过在百度上使用site inurl语法查询吗? 如果还没有的话可以试一下:)
如输入 site:www.baidu.com inurl:news
则会搜出所有在www.baidu.com站点上的包含"news"子串的url。

现在我们有一个inurl查询列表和一个url列表,你能找出所有至少被查询过一次的url吗?


输入格式
输入第一行是一个整数n,表示一共有n个查询。以下n行每行一个查询。查询的site部分和inurl部分中间恰好用一个空格分割,且每行不包含其他空格。下一行是一个整数m,表示url列表中一共有m个url。以下m行每行一个url。

输出格式
每个url输出一行。如果至少符合一条查询,输出1,否则输出0。

输入样例 例
3
site:www.baidu.com inurl:/more
site:zhidao.baidu.com inurl:/browse/
site:www.sina.com.cn inurl:www20041223am
7
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


输出样例 例
1
1
0
0
0
0
1


评分规则


程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

该题共有6个测试数据集,数据1,2,3,4,5,6的大小分别约为4K, 750K, 1.5M, 6.5M, 12M, 18M。所有查询和url均合法,url均以http://开头。url和查询中可能包含中文。输入文件的每行不超过256个字节;

该题目30分。
galois_godel 2007-05-28
  • 打赏
  • 举报
回复
2.大话西游与数字游戏
“叉烧鸡翅膀,我呀最爱吃!……”

百度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程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;

2要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

3该题目共有10个测试数据集,其中数据1~5主要考查正确性,满足x,y,z,n<=1000;输入6~10主要考查时间效率,满足x<=10,000,000,y<=1,000,000,z<=240,000,n<=20,000,000。数据1和6只包含req1,数据2和7只包含req2,数据3和8只包含req12,数据4和7只包含query,数据5和10包含全部四种查询。每组数据都恰好包含100个查询。

4该题目20分。

3.繁忙的会议室预定问题
百度由最开始的7人团队迅速发展为几千人的大团队,而工程师们经常需要在一起进行“头脑风暴”,这样会议室就成了紧缺资源。为了有效利用资源,大家决定制定规则, 自动安排会议室的使用。

为了公平起见,应按照申请时间从早到晚依次考虑,先到先得,且申请一旦被接受就不能取消。在处理每条请求时,只要当前请求可以和前面已接受的所有请求同时满足时就必须被接受(如有必要,可以调整给已接受申请安排的会议室和开会时间)。注意同一时间开的不同会议必须在不同的会议室,而同一个人不能同时参加两个会议。

输入格式
输入第一行为会议室总数n和请求总数m;第二行是n个整数,表示会议室能够容量的人数。以下m行每行是一个请求,按请求时间先后顺序排列(即应优先满足在输入中更早出现的请求)。
每个请求中第一个是整数,表示会议需要的时间长度(单位:小时);之后为与会人名单。人名由不超过四个汉字组成,用半角逗号分隔(每人名字固定且唯一,有重名的也在登记时区分开)。名单后的数字表示可以安排会议的时间,也以半角逗号分隔,如 10,11,14,15 表示第10, 11, 14, 15个小时可以开会(会议时间为9到19之间的正整数)。

输出格式
输出m行,依次表示每个请求是否被接受。1表示接受,0表示不接受。

输入样例: 例
2 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

样例解释
请求1可以满足,因此接受;在请求1接受的前提下请求2和请求3都无法满足,因此不接受。请求1和请求4可以同时满足(都在会议室1,前者用时间10~12,后者用时间14~15)。需要特别注意的是:如果没有请求1,后三个请求可以同时满足。但是规则是先到先得,请求1只要可以满足就必须接受。

评分规则

1程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

2要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

3该题共有15个测试数据集,均满足n<=10,m<=10。每个会议最多有10人参加;

4该题目30分。


4.SQL中的SELECT语句
SQL中的SELECT语句用于从数据库中查询记录。某个工程项目数据库中有一个所有数据均为字符串的表,需要查询一些满足条件的记录数。本题考虑SELECT语句的简化形式,相关语句格式如下:


1. 计数语句,查询满足条件的记录条数。有两种格式:
格式1:SELECT COUNT(*) <FROM子句> WHERE <条件>
格式2:SELECT COUNT(*) <FROM子句>


2. 子集选择语句,选择满足条件的记录并组成一个集合。有两种格式
格式1:SELECT * <FROM子句> WHERE <条件>
格式2:SELECT * <FROM子句>


上述两种语句中的FROM子句具有相同的格式:
格式1:FROM <TABLENAME>
格式2:FROM (子集选择语句)
其中TABLENAME为该工程中惟一的表名,子集选择语句即上述用SELECT *开头的语句。


条件的格式为一条或多条<FIELD>=<VALUE>用关键字and连接(不区分大小写),其中FIELD为字段名,VALUE为数据值,它们均为由大小写字母和数字组成的长度不超过10的非空字符串。该条件表示所有特定的字段必须等于给定值。
给定表中的所有记录和若干条计数语句,输出所有语句的结果。


输入格式
输入第一行为三个整数c, n, q,分别表示数据库中表的列数、记录数和查询次数;第二行为表名(即TABLENAME);第三行为表中的c个字段名(FIELD),之间用一个或多个空格隔开,字段名各不相同;接下来n行,每行表示一个记录,有c个数据值(VALUE),之间用空格隔开;接下去有q行,每行一条SELECT记录数语句,该语句长度(包括空格)不超过1000。输入数据保证每条语句满足题目中给出的计数语句的定义,并且FROM子句的格式1中出现的表名和输入的表名一致。


输出格式
输出q行,每行一个整数,表示相应语句输出的结果(即满足条件的记录数)。


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


评分规则

1程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过2秒,否则该用例不得分;

2要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

3该题共有10个测试数据集,数据1的表与样例相同,并包含15条SELECT语句。数据2,3,4,5的表分别有1,2,5,7列,数据6~10的表均有8列。数据2~5的表均有恰好1000条记录,并包含100个SELECT语句。数据6~10的表不超过3000条记录,并包含不超过20000条SELECT语句。本题的后5组数据着重考查程序的时间效率;

4该题目30分。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧