回 帖 发 新 帖 刷新版面

主题:[转帖]2007百度之星程序设计大赛试题披露

本来想等别人贴出来的,左等右等不来,那就我来吧.我不入地狱谁入地狱,呵呵!
各位得奖了别忘了我啊!

回复列表 (共21个回复)

11 楼

第一题就做了一个小时,以前没接触过汉字,最后提交gets还出问题..
在绝望下看了第二题,发现很简单,兴奋之下提交,之后发觉忘写了对哪道题的判断,就能处理按顺序的.
第三题一看到中文就PASS,
看到第四题开始后悔,为什么没先做这个....
____

12 楼

呵呵,其实这些题目的难度可能能被大多数人接受,可是细节很重要。汉字明显是个坑,第一眼就看出来了,哈哈.....

13 楼

/*
  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 楼

好像有问题,要求采用标准输入,不是采用文件输入

15 楼

哪位把27号的题帖出来。。

16 楼

都是强人要做的题目,我先收藏了

17 楼

我知道是标准输入,但是我现在用文件输入的话容易测试不同数据

18 楼

呵呵!我这的挺多去的呢,听说中级都不是很难啊.

19 楼

呵呵!我这的挺多去的呢,听说中级都不是很难啊.

20 楼

我今天看到的题不是这个样子的啊。

我注册了,但是没时间做,看了一下。

我看到的题好像是这样的四道:(我没有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,而且不重复,正数表示好词,负数表示坏词,数字越大表示词越好,数字越小表示词越坏。

然后给一段文章,把里面所有遇到的好词,坏词的好坏程度加起来。并输出。而且匹配词语以向后吃原则。例如“喷火龙”和“喷火”是坏词,“龙”是好词,那么喷火龙就应该是喷火和龙着两个词,龙不必和前面的词再次组合。(好像是这个意思,这是没看得很明白的地方)

大概就是这四个题吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册