题意:给N条信息,每个信息代表有x个人从开始的时间 到 结束的时间在餐厅就餐,
问最少需要多少座位才能满足需要。
分析:由于时间只有24*60 所以把每个时间点放到 数组a中,并标记开始的时间+x,
结束的时间 -x。最后累加比较。
如果时间点太多的时候可以把时间点放到结构体里,排序,然后依次枚举结构体。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <cstdio> 6 #include <vector> 7 #include <algorithm> 8 #define LL long long 9 #define rep(i, a, b)for(int i = a; i < b; i++) 10 const int maxn = 1500+10; 11 12 using namespace std; 13 int a[maxn]; 14 15 int main() 16 { 17 int t, n, x, h, m, ans; 18 cin>>t; 19 while(t--) 20 { 21 memset(a, 0, sizeof(a)); 22 cin>>n; 23 while(n--) 24 { 25 scanf("%d %d:%d", &x, &h, &m); 26 a[h*60+m] += x; 27 scanf("%d:%d", &h, &m); 28 a[h*60+m] -= x; 29 } 30 ans = 0; 31 rep(i, 1, maxn-1) 32 a[i] += a[i-1]; 33 rep(i, 0, maxn-1) 34 if(a[i]>ans) 35 ans = a[i]; 36 cout<<ans<<endl; 37 } 38 }