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
中,由于雪梨和大梨在任何时刻都是同一种水果,最多只有四种水果同时在前台。
评分规则
程序将运行在一台
Linux
机器上(内存使用不作严格限制),在每一测试用例上运行不能超过
1
秒,否则该用例不得分;
要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题共有
10
个测试数据集,每组数据均满足
n<=10
,每个时段最多有
10
个水果,一共不超过
50
个水果;
该题目
20
分。
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 中的第几个数?
规则 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 (区分大小写)。
输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为 req1 、 req2 、 req12 、 query (区分大小写)。
输出格式
前三种查询输出一个无符号整型的解。对于 “query n” 的查询,若 n 是规则中的数则输出相应的解,否则输出 -1 。
前三种查询输出一个无符号整型的解。对于 “query n” 的查询,若 n 是规则中的数则输出相应的解,否则输出 -1 。
输入样例
例
req1 10
req2 10
req12 10
query 14
req1 10
req2 10
req12 10
query 14
输出样例
例
11
10
12
-1 13
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
只要可以满足就必须接受。
评分规则
程序将运行在一台
Linux
机器上(内存使用不作严格限制),在每一测试用例上运行不能超过
2
秒,否则该用例不得分;
要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题共有
15
个测试数据集,均满足
n<=10
,
m<=10
。每个会议最多有
10
人参加;
该题目
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
评分规则
程序将运行在一台
Linux
机器上(内存使用不作严格限制),在每一测试用例上运行不能超过
2
秒,否则该用例不得分;
要求程序能按照输入样例的格式读取数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题共有
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
组数据着重考查程序的时间效率;
该题目
30
分。