2007百度之星

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 进行移动。其中 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 分。注意:每个测试点的得分不必为整数。

 

2007年百度之星程序设计大赛试题总决赛题目

比赛目标:

完成基于 CounterStrike1.5 的 podbot AI ,在 fy_iceworld_plus, de_dust2, de_inferno 三张地图上与对手 AI 展开较量。 Podbot 的基本代码框架由平台给出,请选手自行参考研究。

有待完成的代码位于 bot_T.cpp bot_T.h bot_CT.cpp bot_CT.h 中,各个函数功能与接口请选手参考代码中的注释说明。

比赛方式:

•  提交代码:请将 bot_T.cpp bot_T.cpp bot_CT.cpp bot_CT.h 压缩成一个 rar 压缩文件 , 通过比赛网站提交:

第一二组使用 http://192.168.0.3/

第三四组使用 http://192.168.0.4/

第五六组使用   http://192.168.0.5/

•  赛制:

第一阶段:从比赛开始至之后 4 小时整。提交第一阶段 bot 代码用于 iceworld 测试,测试结果将决定第二阶段分组。

第二阶段:使用 dust2 和 inferno 两张地图,赛程是由小组循环决出前八。前八由淘汰赛决定胜负,判定最终名次。

操作说明

编译

进入目录 C:/astar2007/MSYS

双击运行 msys.bat

在 msys 界面中输入 cd /c/astar2007/PODBOT

执行命令 make ,如果 make 成功,则在 .obj.win32 子目录中有 podbot_mm.dll 生成

调试

•  在代码中使用 UTIL_ServerPrint 可以向 console 打印信息

在游戏中使用

•  可以记录 log 文件以供分析检查之用

运行

•  将 podbot_mm.dll 拷贝到

C:\Program Files\ 反恐精英中文站 CS1.5 中文硬盘版 \CS1.5 中文硬盘版 \cstrike\addons\podbot

覆盖原有文件即安装成功。

2 .双击桌面上的 cstrike 快捷方式,启动游戏, 单击进入游戏,建立一个 11 人局域网游戏。进入游戏后按 6 进入观察模式

3 .控制 bot

(1) 按 = 7 杀掉所有自动 bot

(2) 按 = 5 添加 bot ,选择 godlike 且 aggressive 的 bot

(3) 观察游戏结果 按 ~ 可以观察 Server 调试信息输出

规则说明:

•  裁判组拥有最终裁定权

•  胜负判定原则

•  地图为炸弹图时,如 de_dust2 和 de_inferno 时, 以炸弹是否成功爆炸为胜负条件。当地图为 fy_iceworld_plus 时以杀伤数为胜负条件。

•  当由于赛程问题导致平局出现时,由裁判组判定

•  违例判定原则

•  AI 程序不正常导致程序无法运行时,经裁判组认定后判负

•  以各种形式 hack 对手数据,经裁判组认定后判负

原文地址:https://www.cnblogs.com/buffer/p/1457968.html