用一维数组模拟时间轴,某个时刻来了num个顾客,就在这个时间点累加num 并且再离开的时间点累加 -num
最后对整个数组 遍历累加 累加过程中最大的值 就是店内顾客同时吃饭最多的人数 也就是答案
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1600;
int a[maxn];
int h1,m1,h2,m2,num,sum,T,n,ans;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
scanf("%d %d:%d %d:%d",&num,&h1,&m1,&h2,&m2);
a[h1*60+m1]+=num;
a[h2*60+m2]+=-num;
}
ans=0;sum=0;
for(int i=0;i<=24*60+59;i++){
sum+=a[i];
ans=max(ans,sum);
}
printf("%d\n",ans);
}
}