您的位置:首页 > 其它

ZCMU-1478

2016-12-29 17:39 197 查看

1478: 天坑的餐馆

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 75  Solved: 26

[Submit][Status][Web
Board]

Description

天坑毕业后开了一家餐馆,每天都有很多人来吃饭。已知今天共有n组客人来吃饭,第i组一共有Xi位客人,到达的时间为STi,离开的时间为EDi。一位客人坐一张凳子。你能告诉天坑他最少需要准备多少张凳子才能满足所有客人到达时都有凳子坐。

Input

测试文件的第一行有一个正整数T,代表一共有T组测试数据。

每组测试数据的第一行有1个正整数n(1<=n<=1000)代表今天一共有n组客人来吃饭。 

接下来n行,每行有一个正整数Xi(1<=Xi<=100)代表该组客人一共有Xi位客人以及两个时间(hh:mm表示,0<=hh<24,0<=mm<60,第一个时间一定不晚于第二个时间)分别代表该组客人到达的时间和离开的时间。

Output

对于每组测试数据,输出一个答案代表天坑最少需要准备的凳子数。

Sample Input

2
2
6 08:00 09:00
5 08:59 09:59
2
6 08:00 09:00
5 09:00 10:00

Sample Output

11
6
【解析】
这道题时间处理需要注意还有就是我们怎么算凳子要多少张,我们可以开一个数组,开始时间所对应的下标赋值为负数,而结束时间对应的则为正数,如果现在拥有的凳子数
是负数则要将总数加上这个负数的绝对值,然后再把现在有的凳子清空,这样的话我们可以就可以很好的得出需要多少张意思就是我们在哪个时间段有多少张桌子我们都可以
知道,比如样例1,800时有-6张凳子,900有6张凳子了,859的时候有-5张,959要5张。这样总共需要11张,样例2的800就有-6张,900为6,这个时候900其实已经已经剪去了5也就是说还需要1张,1000的时候有5张大概就是这个意思。
#include <iostream>
#include<vector>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
int n,m,k,a,b,c,w,sum;
scanf("%d",&n);
while (n--)
{
int pre[3000]={0};
scanf("%d",&m);
for (int i=0;i<m;i++)
{
scanf("%d %d:%d",&a,&b,&c);
k=b*100+c;
pre[k]-=a;
scanf("%d:%d",&b,&c);
k=b*100+c;
pre[k]+=a;
}
sum=0;
w=0;
for (int i=0;i<=2400;i++)
{
w+=pre[i];
if (w<0)
{
sum=sum+(-w);
w=0;
}
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: