前四道题都是简单题,基本上半个小时就能解决。
A. BQG's Programming Contest
Time Limit: 2000ms
Memory Limit: 32768KB
64-bit integer IO format:
%lld Java class name:
Main
又到了一年一度的北京师范大学新生程序设计竞赛!
为作为良心出题人,决定开大时限送温暖!
写了两份代码,决定采用耗时更多的一份作为标程,题目的时间限制将会是标程的五倍,并且不少于
,但是评测机资源有限,也不能多于
。
然而粗心的
算好时限之后忘记写进题目了,现在给出两份代码的运行时间(单位:
),你需要帮他算出这个题的时间限制。
Input
第一行是一个正整数
, 表示测试数据的组数,
每组测试数据只有一行,
包含两个整数
,表示两份代码的运行时间。
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
“………………………………………………………………………………………………这代码能跑你敢信?”
看到这段代码之后表示被水淹没不知所措,他只知道这个程序在读取了一个整数之后会输出另外一个整数。
现在
给你一个整数,希望你能帮他算一算读取了这个整数之后程序输出的结果。
Input
第一行是一个正整数
,表示测试数据的组数,
每组测试数据只有一行,
包含一个整数
。
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
很快就到考试周了!但是可怜的
平时过于认真训练,结果欠下了一大堆的作业,平时分岌岌可危!
现在
从
时刻开始做作业,一共有
项作业,第
项作业会在
时刻布置下来(即当
时
可以做这一项作业),需要
的时间完成(假设当
时刻
选择做这一项作业,那么当
时
不能选择做其他作业)。
决定尽快解决掉所有作业,因此在完成所有作业之前他不会去做其他事情,他想知道最早在什么时刻能完成所有作业。
Input
第一行是一个正整数
,表示测试数据的组数,
对于每组测试数据,
第一行是一个正整数
,表示作业的数量,
接下来
行,
每行包含两个整数
,表示作业布置的时刻和完成作业所需时间。
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……
在一通乱按之后留下了一个只由大写字母构成的字符串,他想知道这个字符串里有多少个"QAQ"作为子串。
所谓“子串”,是指在原字符串中取出一个连续片段得到的新字符串,比如"BAB"是"ABABC"的子串,但是"AAC"不是。
Input
第一行是一个正整数
,表示测试数据的组数,
每组测试数据只有一行,
包含一个长度
且只包含大写字母的非空字符串。
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
经过一番苦思冥想,
终于想到了两个能够解决某个难题的算法
和
,基于某些原因(其实是因为
太神啦!),算法的时间复杂度总是
,其中
是非负整数。
然而经过大量的脑力运动,可怜的
已经意识模糊了,急需你的帮助,现在给出这两个算法的时间复杂度
和
,他想知道哪一个算法的时间复杂度更优。
Input
第一行是一个正整数
,表示测试数据的组数,
每组测试数据只有一行,
包含两个字符串,中间用一个空格分隔,分别表示算法
和
的时间复杂度,
以下是一些约定,
每个字符串严格按照"O(n^k*(logn)^t)"(不含引号)的格式输入,
保证
,且输入没有多余空格,
当且仅当出现如下情况时需要特殊处理,
(1)
,此时"n^k"将会被简略为"n",乘号将被省略,
(2)
,此时"(logn)^t"将会被简略为"logn",
(3)
且
,此时零次项以及乘号将被省略,
(4)
且
,此时输入串必定是"O(1)"(不含引号),
更多信息请参考样例。
Output
对于每组测试数据,输出一行,
如果
更优请输出"First",如果
更优请输出"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