标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 931 Accepted Submission(s): 412
2 2 6 08:00 09:00 5 08:59 09:59 2 6 08:00 09:00 5 09:00 10:00
11 6
解题思路:
题意为:有n组客人来吃饭,给出每组客人的人数及用餐开始时间,结束时间,格式为hh:mm;要求一组客人来的时候就必须给其安排位子
,问最少需要多少把椅子才能做到(一位客人需要一把椅子).
time[i],表示第i分钟有多少用餐的人,也就是需要多少把椅子,将开始时间,结束时间转化为分钟为单位的时间。
注意边界一组的结束和另一组的开始如果相同,则不需要额外的椅子,因此把每组的结束时间都-1. 对于每一组人,开始时间到结束时间
循环time[i]+=该组的人数。 最后再遍历time[i]数组,从中找到最大值即为该题的答案。
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <cmath>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cctype>
using namespace std;
#define ll long long
int n;
int time[1442];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(time,0,sizeof(time));
scanf("%d",&n);
int sh,sm;
int eh,em;
int cnt=0;
int ans=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&cnt);
scanf("%d:%d",&sh,&sm);
scanf("%d:%d",&eh,&em);
int s=sh*60+sm;
int e=eh*60+em;
e--;
for(int i=s;i<=e;i++)
{
time[i]+=cnt;
}
}
for(int i=0;i<1440;i++)
{
if(ans<time[i])
ans=time[i];
}
printf("%d\n",ans);
}
return 0;
}
[ACM] HDU 4883 TIANKENG’s restaurant
标签:
原文地址:http://blog.csdn.net/sr_19930829/article/details/42679071