博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

冬虫夏草

每天进步1% 现实照进神话
xiangjian.cublog.cn


百度程序设计(2)
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

 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    俄罗斯游戏中共有七种方块,每种方块都由四个方格组成,如下图所示,七种方块分别编号为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个数据的总分从大到小排序,如果总分相同则按所有数据的原始得分之和排序;如果仍有相同,则按所有数据的消去的总行数排序;如果仍相同,则名次相同

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[题目五]

题目描述:

SQLSELECT语句用于从数据库中查询记录。某个工程项目数据库中有一个表,表中满足某个条件的记录数要被频繁查询。查询表中满足某条件的记录数的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记录数语句要求输出相应的结果(满足条件的总记录数)。

数据输入:

       有多个测试例子:

       每个测试例子:第一行两个整数N2 < N <= 1000)和M(0< M <= 10000)分别表示数据库中表的记录数和查询次数;第二行是一个表名(TABLENAME);第三行表中的C列属性名(PROPERTY)(0 < C < 11),之间用空格隔开,列属性名各不相同;接下来N行,每行表示一个记录,有CVALUE,之间用空格隔开;接下去有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()读写数据

[题目六]

题目描述

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

为了公平起见,应按照申请时间从早到晚依次考虑,先到先得,且申请一旦被接受就不能取消。注意同一时间开的不同会议必须在不同的会议室,而同一个人不能同时参加两个会议。

输入格式

输入第一行为会议室总数n和请求总数m;第二行是n个整数,表示会议室能够容量的人数。以下m行每行是一个请求,按请求时间先后顺序排列(即应优先满足在输入中更早出现的请求)。

每个请求中第一个是整数,表示会议需要的时间长度(单位:小时);之后为与会人名单。人名由不超过四个汉字组成,用半角逗号分隔(每人名字固定且唯一,有重名的也在登记时区分开)。名单后的数字表示可以安排会议的时间,也以半角逗号分隔,如 10,11,14,15 表示第10, 11, 14, 15个小时可以开会(会议时间为919之间的正整数)。

输出格式

输出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

[题目七]

题目描述;

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

从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如“小雪梨”和“大雪梨”是同一种水果,而“核桃”和“水蜜桃”也被认为是同一种水果。尤其要指出的是,如果有三种水果x, y, z同时在前台出现,且xy是同一种水果,yz也是同一种水果的时候,xz也被认为是同一种水果。现在前台的姐姐们想知道,今天是否有“水果开会”——五种或更多的水果同时在前台出现。

输入格式

输入的第一行只有一个整数n,表示购置水果的组数。接下来的n行表示水果的到达时间、取走时间(时间用12001900之间的正整数表示,保证取走时间大于到达时间)。剩下的字符串以空格分割每一种水果。如“1400 1600 雪梨 水蜜桃”,表示下午两点到四点(包含两点和四点这两个时间点),雪梨和水蜜桃会在前台等待开会。每种水果名称由不超过十个汉字组成。

输出格式

    输出仅一行,包含一个字符串YesNo,分别表示今天水果开会与否。

  

输入样例1

3

1200 1400 雪梨 柠檬

1300 1400 西瓜 苹果

1400 1800 花生 水蜜桃

输出样例1

Yes

输入样例2

3

1200 1400 雪梨 柠檬

1400 1500 大梨

1500 1800 大梨

输出样例2

No

[题目八]

题目描述

“叉烧鸡翅膀,我呀最爱吃!……”

百度spider组的“黑龙潭之行”在烤着鸡翅,唱着星爷的经典时达到高潮。大家在篝火旁围成一圈,开始玩“数7”加强版游戏,规则如下:

规则17的倍数或含7的数时pass

规则2遇有包含相同数字的数时pass。注意相同数字不必相邻。例如121

数错的惩罚很残酷——吞食烤全羊。为避免惩罚,百度工程师们需要你——史上最强程序员的帮助。百度工程师想知道:

req1 x:符合规则1的第x个数是什么?

req2 y:符合规则2的第y个数是什么?

req12 z:同时符合规则12的第z个数是什么?

query n:数n是规则1中的第几个数,是规则2中的第几个数?

输入格式

输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为req1req2req12query(区分大小写)。

输出格式

前三种查询输出一个无符号整型的解。对于“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-08-09 16:08

[题目一]

题目描述

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

wii游戏机每个手柄需要使用两节电池(这两个电池可以是不同的品牌)。工程师们在玩游戏时。如果手柄没有电,他们都是将其中没电的电池拿走,并换上一个全新的电池,有电的必须继续使用。

例如,已知三种电池的使用时间分别为3小时、5小时和8小时。一开始,工程师使用3小时和5小时的电池。3小时后,换上一个8小时的,再过2小时后,手柄再次没电时,已经没有电池可用了。但如果一开始就使用那个8小时电量的电池,可以玩满8个小时。

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

输入格式

输入第一行为一个正整数n,表示电池的种数。接下来n行,每行两个整数LF,表示使用时间为L的电池有F个。

输出格式

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

输入样例

3

3 2

5 2

8 2

输出样例

5 8

[题目二]

题面描述:

你尝试过在百度上使用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列表对应的文件名,程序的输出请输出到标准输出。

[题目三]

题目描述

    百度网页采集器(Baiduspider)每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下:

    1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重;

    2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。

    3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。

    4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个“有效”好词,则只计算最长“有效”好词的权重,下一次匹配从这个最长“有效”好词末尾的下一个位置开始。

    5. “无效”好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。

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

输入格式

输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为“词 空格 词的权重”。权重为一个带符号32位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为0的词。

测试数据中的词全部为1-5个字的中文,但作为“网页”的字符串中同时包含中文和ASCII字符,每个汉字占2个字节。并非“网页”中的所有字都在词典中。

样例输入

小胖之喷火龙骑士!!

小胖 6

喷火 -1

喷火龙 -1

火龙 -1

4

龙骑 3

龙骑士 2

骑士 -2

3

输出格式

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

样例输出

7

样例解释

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

[题目四]

题目描述

       Baidu的服务器上使用的不是北京时间,而是Baidu时间。Baidu时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从200011起的第几天。

现在就请大家设计一个程序将北京时间转换为百度时间。

输入格式

       输入数据的每一行为一个待转化的北京时间,格式包括两种:

一种为:YYYY-MM-DD,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);

另一种为:MM/DD/YYYY,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);

不符合任何一种格式的输入视为非法输入。

输出格式

       每个数据输出一行。如果格式正确,输出一个正整数,否则输出Error

输入样例

2006-03-21

AStar2007

04/22/2007

输出样例

2149

Error

2463

 

发表于: 2008-05-09 ,修改于: 2008-05-09 23:48,已浏览122次,有评论1条 推荐 投诉


网友评论
内容:
http://hi.baidu.com/astar
本站网友评论于:2008-05-09 23:55:56 (58.49.234.★)

发表评论