4883 TIANKENG’s restaurant

来源:互联网 发布:java培训贷款骗局流程 编辑:程序博客网 时间:2024/04/30 21:15

TIANKENG’s restaurant

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 1606    Accepted Submission(s): 577


Problem Description
TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of customers come to have meal because of its delicious dishes. Today n groups of customers come to enjoy their meal, and there are Xi persons in the ith group in sum. Assuming that each customer can own only one chair. Now we know the arriving time STi and departure time EDi of each group. Could you help TIANKENG calculate the minimum chairs he needs to prepare so that every customer can take a seat when arriving the restaurant?
 

Input
The first line contains a positive integer T(T<=100), standing for T test cases in all.

Each cases has a positive integer n(1<=n<=10000), which means n groups of customer. Then following n lines, each line there is a positive integer Xi(1<=Xi<=100), referring to the sum of the number of the ith group people, and the arriving time STi and departure time Edi(the time format is hh:mm, 0<=hh<24, 0<=mm<60), Given that the arriving time must be earlier than the departure time.

Pay attention that when a group of people arrive at the restaurant as soon as a group of people leaves from the restaurant, then the arriving group can be arranged to take their seats if the seats are enough.
 

Output
For each test case, output the minimum number of chair that TIANKENG needs to prepare.
 

Sample Input
226 08:00 09:005 08:59 09:5926 08:00 09:005 09:00 10:00
 

Sample Output
116
 

题意:
给出客人的数量和客人来的时间和离开的时间,求出该天需要多少个椅子才能保证所有的客人都能每人一个.....


一般思路:
如果区间有重复的,就需要这两次客人的次数相加,依次判断下去,求得需要的最大值.......

扯一下思路.....

这个题,做的时候先是考虑的字符串,结果超时了........后来花了很长时间去优化,还是不行,最后想了想,果断把字符型转化为整数来处理了.................
但是区间重复求贪心的是真没做过了,本来是想用双循环依次判断,后来不知道为啥还不行,晕了.....
学长讲了这道题,竟然是打表过的,当时瞬间就开拓了思路,没想到还可以这样做......然后自己也用这个做法写一遍,感觉好巧妙,
不过下面的代码是自己感觉更简练的代码了..........




#include<stdio.h>#include<string.h>int main(){    int t,i,j,p,a,b,c,d,x[2005];    scanf("%d",&t);    while(t--)    {    memset(x,0,sizeof(x));int sum=0,n;        scanf("%d",&n);        for(i=0;i<n;++i)        {            scanf("%d %d:%d %d:%d",&p,&a,&b,&c,&d);            int beg=a*60+b;//把时间转化为分钟,计算量省去了很多             int end=c*60+d;            for(j=beg;j<end;++j)            {            x[j]+=p;            sum=(sum>x[j])?sum:x[j];//这样一直更新最大值 }        }        printf("%d\n",sum);    }    return 0;}




0 0
原创粉丝点击