USACO milk2
题意:n个农夫给n只羊喂奶,分别给出他们的起始时间和结束时间,求重叠的和没有重叠的最长时间。
mark:wa了一次。变量max1忘记每次遇到不重叠的时候需要重新初始化了。。
代码:
/* ID: andre_j2 LANG: C TASK: milk2 */ #include <stdio.h> #include <stdlib.h> typedef struct { int st,en; }fa; int cmp(const void *a, const void *b) { fa *p = (fa *)a, *q = (fa *)b; if(p->st != q->st) return p->st - q->st; return p->en - q->en; } fa f[5010]; main () { freopen("milk2.in", "r", stdin); freopen("milk2.out", "w", stdout); int n,max1,max2,end,m; int i; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d%d", &f[i].st, &f[i].en); qsort(f, n, sizeof(f[0]), cmp); max1 = m = f[0].en - f[0].st; max2 = 0; end = f[0].en; for(i = 1; i < n; i++) { if(f[i].st > end) { if(f[i].st - end > max2) max2 = f[i].st - end; end = f[i].en; if(m > max1) max1 = m; m = f[i].en - f[i].st; } else if(f[i].en > end) {m += f[i].en - end; end = f[i].en;} } if(m > max1) max1 = m; printf("%d %d\n", max1, max2); exit (0); }