http://acm.pku.edu.cn/JudgeOnline/problem?id=2376
在T天里干完一件事,有多只牛,每只牛负责连续几天,日期可能重叠。找出最少数量的牛干完这件事。(可能讲的不清楚)
#include<stdio.h> #include<algorithm> using namespace std; struct ORDER { int left; int right; }order[25001]; bool cmp(ORDER a, ORDER b) { return a.left < b.left; } int main() { int n_cow, time, i, step, find, tot, ok, temp_right; while(scanf("%d%d", &n_cow, &time)!=EOF) { for(i=0; i<n_cow; i++) scanf("%d%d", &order[i].left, &order[i].right); sort(order, order + n_cow, cmp); if(order[0].left >1) { printf("-1\n"); continue; } step = 0; i = 0; ok = 1; tot = 0; while(step < time && i < n_cow) { find = 0; temp_right = 0; while(order[i].left <= step + 1 && i < n_cow ) { find = 1; if(order[i].right > temp_right) temp_right = order[i].right; i++; } if(!find) { ok = 0; break; } step = temp_right; tot++; } if(!ok || step < time) printf("-1\n"); else printf("%d\n", tot); } return 0; }