2015年北京师范大学新生程序设计竞赛题解

前四道题都是简单题,基本上半个小时就能解决。

A. BQG's Programming Contest

Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:  %lld      Java class name:  Main
又到了一年一度的北京师范大学新生程序设计竞赛! Big \ Q \ God为作为良心出题人,决定开大时限送温暖!
 
BQG写了两份代码,决定采用耗时更多的一份作为标程,题目的时间限制将会是标程的五倍,并且不少于 1000ms,但是评测机资源有限,也不能多于 60000ms
 
然而粗心的 BQG算好时限之后忘记写进题目了,现在给出两份代码的运行时间(单位: ms),你需要帮他算出这个题的时间限制。

Input

第一行是一个正整数 T(T \leq 100000), 表示测试数据的组数,
 
每组测试数据只有一行,
 
包含两个整数 t_1,t_2(0 \leq t_1,t_2 \leq 60000),表示两份代码的运行时间。

Output

对于每组测试数据,输出一个整数,表示这个题的时间限制。

Sample Input

5
0 16
200 212
1000 1024
5000 10000
12000 20000

Sample Output

1000
1060
5120
50000
60000
#include<iostream>
#include<string>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    long long a,b,c,t;
    cin>>t;
    while(t--){
        cin>>a>>b;
        c=max(a,b);
        c*=5;
        if(c<1000)
            c=1000;
        else if(c>60000)
            c=60000;
        cout<<c<<endl;
    }
    return 0;
}

B. BQG's Messy Code

Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:  %lld      Java class name:  Main

“………………………………………………………………………………………………这代码能跑你敢信?”

Big \ Q \ God看到这段代码之后表示被水淹没不知所措,他只知道这个程序在读取了一个整数之后会输出另外一个整数。
 
现在 BQG给你一个整数,希望你能帮他算一算读取了这个整数之后程序输出的结果。

Input

第一行是一个正整数 T(T \leq 100000),表示测试数据的组数,
 
每组测试数据只有一行,
 
包含一个整数 x(-1000000000 \leq x \leq 1000000000)

Output

对于每组测试数据,输出一个整数,表示这个程序输出的结果。

Sample Input

3
0
1
-1

Sample Output

0
-1
1
#include<iostream>
#include<string>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    long long a,t;
    cin>>t;
    while(t--){
        cin>>a;
        cout<<-a<<endl;
    }
    return 0;
}

C. BQG's Approaching Deadline

Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:  %lld      Java class name:  Main
很快就到考试周了!但是可怜的 Big \ Q \ God平时过于认真训练,结果欠下了一大堆的作业,平时分岌岌可危!
 
现在 BQGt=0时刻开始做作业,一共有 n项作业,第 i项作业会在 a_i时刻布置下来(即当 t \geq a_iBQG可以做这一项作业),需要 b_i的时间完成(假设当 t=x时刻 BQG选择做这一项作业,那么当 t \in [x,x+b_i)BQG不能选择做其他作业)。
 
BQG决定尽快解决掉所有作业,因此在完成所有作业之前他不会去做其他事情,他想知道最早在什么时刻能完成所有作业。

Input

第一行是一个正整数 T(T \leq 100),表示测试数据的组数,
 
对于每组测试数据,
 
第一行是一个正整数 n(n \leq 1000),表示作业的数量,
 
接下来 n行,
 
每行包含两个整数 a(0 \leq a \leq 1000000000),b(0 &lt; b \leq 1000000),表示作业布置的时刻和完成作业所需时间。

Output

对于每组测试数据,输出一个整数,表示最早完成所有作业的时刻。

Sample Input

2
3
0 1
1 2
2 3
2
0 1
2 3

Sample Output

6
5
#include<iostream>
#include<string>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
    int t,a,n;

    cin>>t;
    while(t--){
        cin>>n;
        map<int,int> m;
        for(int i=0;i<n;i++)
        {
            cin>>a;
            cin>>m[a];
        }
        int res=0;
        map<int,int> ::iterator it;
        for(it=m.begin();it!=m.end();it++)
        {
            if(res>=it->first)
                res+=it->second;
            else
                res=it->first+it->second;
        }
        cout<<res<<endl;

    }
    return 0;
}


D. BQG's Random String

Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:  %lld      Java class name:  Main
“Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。”——百度百科
 
但是初学要上手Vim并不是一件容易的事……问:如何生成一个随机的字符串?答:让新手退出Vim……
 
Big \ Q \ God在一通乱按之后留下了一个只由大写字母构成的字符串,他想知道这个字符串里有多少个"QAQ"作为子串。
 
所谓“子串”,是指在原字符串中取出一个连续片段得到的新字符串,比如"BAB"是"ABABC"的子串,但是"AAC"不是。

Input

第一行是一个正整数 T(T \leq 1000),表示测试数据的组数,
 
每组测试数据只有一行,
 
包含一个长度 \leq 10000且只包含大写字母的非空字符串。

Output

对于每组测试数据,输出一个整数,表示字符串中子串"QAQ"的个数。

Sample Input

5
Q
QAQ
QAQAQ
QQQQQQQ
QAQABCDEF

Sample Output

0
1
2
0
1
#include<iostream>
#include<string>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<map>

using namespace std;
int main()
{
    int t;
    cin>>t;
    string str="QAQ",a;
    while(t--){
        int cnt=0;
        string s;
        cin>>s;
        int len=s.length();
        for(int i=0;i<len-2;i++)
        {
            a=s.substr(i,3);
            if(a==str)
                cnt++;
        }
        cout<<cnt<<endl;
    }
    return 0;
}

E. BQG's Complexity Analysis

Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:  %lld      Java class name:  Main
经过一番苦思冥想, Big \ Q \ God终于想到了两个能够解决某个难题的算法 A_{1}A_{2},基于某些原因(其实是因为 BQG太神啦!),算法的时间复杂度总是 T(n)=O(n^{k}log^{t}n),其中 k,t是非负整数。
 
然而经过大量的脑力运动,可怜的 BQG已经意识模糊了,急需你的帮助,现在给出这两个算法的时间复杂度 T_{1}(n)T_{2}(n),他想知道哪一个算法的时间复杂度更优。

Input

第一行是一个正整数 T(T \leq 100000),表示测试数据的组数,
 
每组测试数据只有一行,
 
包含两个字符串,中间用一个空格分隔,分别表示算法 A_{1}A_{2}的时间复杂度,
 
以下是一些约定,
 
每个字符串严格按照"O(n^k*(logn)^t)"(不含引号)的格式输入,
 
保证 0 \leq k,t \leq 1000000000,且输入没有多余空格,
 
当且仅当出现如下情况时需要特殊处理,
 
(1) k=1,此时"n^k"将会被简略为"n",乘号将被省略,
 
(2) t=1,此时"(logn)^t"将会被简略为"logn",
 
(3) k+t&gt;0kt=0,此时零次项以及乘号将被省略,
 
(4) k=0t=0,此时输入串必定是"O(1)"(不含引号),
 
更多信息请参考样例。

Output

对于每组测试数据,输出一行,
 
如果 A_{1}更优请输出"First",如果 A_{2}更优请输出"Second",如果二者复杂度同阶请输出"Both"(均不含引号)。

Sample Input

7
O(logn) O(1)
O(logn) O((logn)^2)
O(n) O(n^2)
O(n^2) O(nlogn)
O(n(logn)^2) O(n^2*logn)
O(n^2*logn) O(nlogn)
O(n^2*(logn)^2) O(n^2*(logn)^2)

Sample Output

Second
First
First
Second
First
Second
Both



































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值