主题:[转帖]2007百度之星程序设计大赛试题披露
goal00001111
[专家分:4030] 发布于 2007-05-26 22:26:00
本来想等别人贴出来的,左等右等不来,那就我来吧.我不入地狱谁入地狱,呵呵!
各位得奖了别忘了我啊!
回复列表 (共21个回复)
11 楼
poorb [专家分:180] 发布于 2007-05-26 23:31:00
第一题就做了一个小时,以前没接触过汉字,最后提交gets还出问题..
在绝望下看了第二题,发现很简单,兴奋之下提交,之后发觉忘写了对哪道题的判断,就能处理按顺序的.
第三题一看到中文就PASS,
看到第四题开始后悔,为什么没先做这个....
____
12 楼
Templar9d [专家分:2110] 发布于 2007-05-26 23:48:00
呵呵,其实这些题目的难度可能能被大多数人接受,可是细节很重要。汉字明显是个坑,第一眼就看出来了,哈哈.....
13 楼
goal00001111 [专家分:4030] 发布于 2007-05-27 16:57:00
/*
Name:
Copyright:
Author:
Date: 26-05-07 22:42
Description:
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
评分规则
程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;
要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题目共有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个查询。
该题目20分。
*/
#include <iostream>
#include<fstream>
#include <time.h>
using namespace std;
bool Contain7(int n);
int Req_1(int n);
int Req_2(int n);
bool Repeat(int n);
int Req_12(int n);
void Query(int n, int & r1, int & r2);
void ReadData(const char *filename, int a[]);
int main()
{
time_t startTime;
time_t endTime;
time(&startTime);
int data[4];
ReadData("in2.txt", data);//读入数据
cout << Req_1(data[0]) << endl;
cout << Req_2(data[1]) << endl;
cout << Req_12(data[2]) << endl;
int r1, r2;
Query(data[3], r1, r2);
cout << r1 << " " << r2 << endl;
time(&endTime);
cout << difftime(endTime, startTime) << endl;
getchar();
return 0;
}
void ReadData(const char *filename, int a[])
{
fstream in(filename);
if (!in)
return ; //结束程序执行
char buf[6];
for (int i=0; !in.eof() && i<4; ++i)
{
in >> buf;
in >> a[i];
}
in.close(); //关闭文件
}
bool Contain7(int n)
{
while (n > 0)
{
if (n%10 == 7)
return true;
n /= 10;
}
return false;
}
int Req_1(int n)
{
int i = 1, s = 0;
for (; s<n; ++i)
{
if (i%7 == 0 || Contain7(i))
continue;
++s;
}
return i-1;
}
int Req_2(int n)
{
int i = 1, s = 0;
for (; s<n; ++i)
{
if (Repeat(i))
continue;
++s;
}
return i-1;
}
bool Repeat(int n)
{
int a[20];
int top = 0;
int m;
while (n > 0)
{
m = n % 10;
for (int i=0; i<top; ++i)
{
if (a[i] == m)
return true;
}
a[top++] = m;
n /= 10;
}
return false;
}
int Req_12(int n)
{
int a = Req_1(n);
int b = Req_2(n);
int t;
if (a > b)
{
t = a;
while (Repeat(t))
++t;
}
else
{
t = b;
while (t%7 == 0 || Contain7(t))
++t;
}
return t;
}
void Query(int n, int & r1, int & r2)
{
if (n%7 == 0 || Contain7(n))
r1 = -1;
else
{
r1 = 1;
for (int i=1; i<n; ++i)
{
if (i%7 == 0 || Contain7(i))
continue;
++r1;
}
}
if (Repeat(n))
r2 = -1;
else
{
r2 = 1;
for (int i=1; i<n; ++i)
{
if (Repeat(i))
continue;
++r2;
}
}
}
14 楼
yxs0001 [专家分:9560] 发布于 2007-05-27 17:37:00
好像有问题,要求采用标准输入,不是采用文件输入
15 楼
chenyajun [专家分:0] 发布于 2007-05-27 18:10:00
哪位把27号的题帖出来。。
16 楼
freshlover [专家分:30] 发布于 2007-05-27 18:36:00
都是强人要做的题目,我先收藏了
17 楼
goal00001111 [专家分:4030] 发布于 2007-05-27 19:55:00
我知道是标准输入,但是我现在用文件输入的话容易测试不同数据
18 楼
liangc [专家分:0] 发布于 2007-05-27 20:04:00
呵呵!我这的挺多去的呢,听说中级都不是很难啊.
19 楼
liangc [专家分:0] 发布于 2007-05-27 20:05:00
呵呵!我这的挺多去的呢,听说中级都不是很难啊.
20 楼
SonicLing [专家分:6260] 发布于 2007-05-27 20:33:00
我今天看到的题不是这个样子的啊。
我注册了,但是没时间做,看了一下。
我看到的题好像是这样的四道:(我没有Copy下来,仅凭记忆重写出来的,若有错误,敬请原谅)
百度时间
把北京时间转换为百度时间。百度时间就是现在的北京时间与2000年1月1日之间的天数。(其实就是两个日期之间的天数问题,涉及到闰年的计算)。
输入的时间包含两种格式:yyyy-mm-dd和mm-dd-yyyy,如果不是这两种格式,则输出“Error”。范例好像是这样的:
输入:
2000-1-1
AStar2007
1-1-2001
输出:
0
Error
366
百度搜索
百度支持高级搜索,现在要你实现一个inurl功能,inurl的用法如下:
site:www.xxxx.com/directory/ inurl:file
只要目标URL以site字串开头(当然,前面可能含有http://前缀),并且包含inurl字串,那么就表示匹配。
范例是这样的:
输入:
3
site:www.baidu.com/more inurl:/more/
site:zhidao.baidu.com/file inurl:/more
site:www.sina.com.cn/xxx inurl:/yyy
7
www.baidu.com/more/
...(给出7个目标URL)
输出:
(7个数字,一个一行,非0即1,1表示对应目标串被上面3个inurl其中之一匹配,0表示3个inurl都不匹配)
(这个就是字符串匹配了)
Wii游戏
Wii游戏机有两个手柄,每个手柄需要两个电池,现在给出若干对电池,以及这些电池各自还可以使用的小时数,计算这两个手柄可以同时使用的最小时间和最大时间。
例如有三对电池,分别能够使用的小时数是3、5、8,最短游戏时间就是先用3小时和5小时的那两对,等3小时电量的电池用完之后换上8小时的电池继续玩,再过2小时后,先前5小时电池的手柄就没有电池可以更换了,最短时间5小时。如果一开始用3小时和8小时的那两对,然后用5小时的电池换3小时的电池,那么两个手柄可以同时工作长达8小时,这个是最长时间。(感觉就是背包问题)
这里的电池是否是成对给时间,我就记得不是很清楚了,反正例子就是上面的例子。
还有一个是文字统计的题目,大略看了一下,不是很懂。
大意大概是这样:
有一组输入,若干行,每行2列,前面是一个词(字符串,可能是汉字),后面是一个数字(可以是负数)。数字非0,而且不重复,正数表示好词,负数表示坏词,数字越大表示词越好,数字越小表示词越坏。
然后给一段文章,把里面所有遇到的好词,坏词的好坏程度加起来。并输出。而且匹配词语以向后吃原则。例如“喷火龙”和“喷火”是坏词,“龙”是好词,那么喷火龙就应该是喷火和龙着两个词,龙不必和前面的词再次组合。(好像是这个意思,这是没看得很明白的地方)
大概就是这四个题吧。
我来回复