A-时间统计 (很简单,直接算也成)
第一行输入一个整数n,表示样例个数。接下来每组样例两行,表示开始时间和结束时间,格式为xdayHH:MM:SS,x是一个整数表示第几天,0 < x < 20000,HH表示小时,MM表示分钟,SS表示秒,保证时间合法,结束时间比开始时间晚。
每组数据输出一行一个整数,表示经过的秒数。
2 1day03:26:12 1day04:26:12 123day15:00:01 19999day15:00:00
3600 1717286399
出题人:郭晨亮
#include
#include
using namespace std;
int main()
{
int n,x1,x2,h1,h2,m1,m2,s1,s2;
scanf("%d",&n);
long long sum1,sum2,res;
while(n--){
res=0;
scanf("%dday%d:%d:%d",&x1,&h1,&m1,&s1);
scanf("%dday%d:%d:%d",&x2,&h2,&m2,&s2);
res=(x2-x1)*24;
res=res*60+(h2-h1)*60;
res=res*60+(m2-m1)*60;
res=res+(s2-s1);
printf("%lld\n",res);
}
return 0;
}
B-String
012345
6789AB
CDEFGH
IJKLMN
OPQRST
UVWXYZ
第一行是一个整数T(1 ≤ T ≤ 400),表示样例的个数。 每个样例一行字符串S,长度1≤ len ≤ 500。
每组数据输出一行需要找出的所有字符,如果需要找出的字符有多个,所在行不同的按行从小到大排序,所在行相同的按列从小到大排序。
3 13579 AADD 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
13 7ADG 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
C-Boom (暴力)
第一行是一个整数T(1 ≤ T ≤ 50),表示样例的个数。 以后每个样例第一行是一个整数n(1 ≤ n ≤ 50),表示炸弹的个数。 接下来n行,每行四个整数,第i行为xi1,yi1,xi2,yi2(0 ≤ xi1,yi1,xi2,yi2≤ 100),输入保证合法。
每个样例输出一行,一个整数,表示最多将有多少枚炸弹会波及到同一个区域。
1 2 0 0 50 50 40 40 100 100
2
在左下角为(40,40),右上角为(50,50)的矩形区域内,有两个炸弹同时波及,所以答案为2。
题解:注意到数据规模不大,所以这题可以直接暴力求解。这题要注意到不考虑边界和角落。
#include
#include
#include
#include
using namespace std;
int main()
{
int t,n,x1,y1,x2,y2;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int boom[110][110];
memset(boom,0,sizeof(boom));
while(n--){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(int i=x1;i
D-Fibonacci进制 (贪心)
第一行是一个整数T(1 ≤ T ≤ 10000),表示样例的个数。
以后每行一个样例,为一个十进制正整数x(1 ≤ x ≤ 109)。
每行输出一个样例的结果。
5 1 10 100 1000 1000000000
1 14 367 10966 4083305275263
E-吃货 (预处理+二分)
第一行是一个整数T(1 ≤ T ≤ 10),表示样例的个数。 以后每个样例第一行是两个整数n,m(1 ≤ n,m ≤ 30000),表示美食的种类数与查询的次数。 接下来n行,每行两个整数分别表示第i种美食的价格与美味度di,ci (1 ≤ di,ci ≤ 109)。 接下来m行,每行一个整数表示mostshy带t(1 ≤ t ≤ 109)元去商业街觅食。
每个查询输出一行,一个整数,表示带t元去商业街能够品味到美食的最高美味度是多少,如果不存在这样的美食,输出0。
1 3 3 1 100 10 1000 1000000000 1001 9 10 1000000000
100 1000 1001
大量的输入输出,请使用C风格的输入输出。
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=3e4+10;
struct Node{
int d,c;//d是价格,c是美味度
}mes[maxn];
int dp[maxn];
bool cmp(Node A,Node B)
{
if(A.d != B.d)
return A.d < B.d;
return A.c > B.c;
}
int main()
{
int t,n,m,f,r,l,mid,ans;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&mes[i].d,&mes[i].c);
}
sort(mes+1,mes+1+n,cmp);
dp[0]=0;
for(int i=1;i<=n;i++)
{
dp[i]=max(dp[i-1],mes[i].c);//当前钱数为mes[i].d所能买到的最大美食度
}
while(m--){
l = 1,r = n,ans=0; //ans必须初始化,数组下标最好从1开始 如果所有钱都买不到食物,ans=0,输出dp[ans]=dp[0]=0
scanf("%d",&f);
while(l <= r){
mid = (l + r)/2;
if(f >=mes[mid].d){
ans=mid;
l=mid+1;
}else
r=mid-1;
}
printf("%d\n",dp[ans]);
}
}
return 0;
}
F-maze (BFS+优先队列或最短路径)
有多组数据。对于每组数据: 第一行有三个整数n,m,q(2≤ n,m≤300,0≤ q ≤ 1000)。 接下来是一个n行m列的矩阵,表示迷宫。 最后q行,每行四个整数x1,y1,x2,y2(0≤ x1,x2< n,0≤ y1,y2< m),表示一个传送阵的入口在x1行y1列,出口在x2行y2列。
如果小明能够活着到达目的地,则输出最短时间,否则输出-1。
5 5 1 ..S.. ..... .###. ..... ..T.. 1 2 3 3 5 5 1 ..S.. ..... .###. ..... ..T.. 3 3 1 2 5 5 1 S.#.. ..#.. ###.. ..... ....T 0 1 0 2 4 4 2 S#.T .#.# .#.# .#.# 0 0 0 3 2 0 2 2
6 8 -1 3
G-又见斐波那契 (快速幂)
第一行是一个整数T(1 ≤ T ≤ 1000),表示样例的个数。
以后每个样例一行,是一个整数n(1 ≤ n ≤ 1018)。
每个样例输出一行,一个整数,表示F(n) mod 1000000007。
4 1 2 3 100
1 16 57 558616258
H-统计颜色 (线段树+位运算压缩状态,直接按位或)
有多组数据,对于每组数据: 第一行有两个整数n,m(1≤n,m≤100000) 接下来m行,代表m个操作,格式如题目所示。
对于每个2号操作,输出一个整数,表示查询的结果。
10 10 1 1 2 0 1 3 4 1 2 1 4 1 5 6 2 2 1 6 1 7 8 1 2 3 8 1 8 10 3 2 1 10 2 3 8
2 3 2 4 3