一开始直接使用结构体搞结果wrong了,随后查看了某牛的代码发现应该直接在区间上累加 — 得出结论不要直接使用复杂的结构体,转变成简单的数据形式未尝不是一个好方法
原题:
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=526&pid=1001
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <map> #include <algorithm> #include <queue> #include <cmath> #include <bitset> using namespace std; // 大数,内存处理 #define INF 0x3f3f3f3f #define lln long long int #define MEM(a) memset(a, 0, sizeof(a)) #define MEMM(a) memset(b, -1, sizeof(b)) #define DEB(x, n) cout << (x) << " " << (n) << endl #define CR printf("\n") // 调试用 template <class Type> void debug(Type a[], int len) { for(int i = 0; i < len ; i++) { cout << a[i] << " "; } cout << endl; } const int maxn = 10000 + 10; int main() { #ifdef DEBUG // freopen("input", "r", stdin); #endif int T, n; // 24 * 60 + 60 = 1500 int a[2000], s1, s2, e1, e2; int num; scanf("%d", &T); while(T--) { scanf("%d", &n); int maxx = 0; memset(a, 0, sizeof(a)); for(int i = 0; i < n;i++) { scanf("%d%d:%d%d:%d", &num, &s1, &s2, &e1, &e2); int sum1 = s1*60 + s2; int sum2 = e1*60 + e2; for(int j = sum1; j < sum2; j++) { a[j] += num; maxx = max(maxx, a[j]); } } printf("%d\n", maxx); } return 0; }