标签:
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