POJ 3190(优先队列,贪心)
摊位预订。
时间限制:1000MS内存限制:65536K。
共提交材料:12959份接受:4 546名特别法官。
描述。
哦,那些挑剔的N(1<;=N<;=50,000)奶牛!他们是如此挑剔,以至于每一头奶牛都只能在某个精确的时间间隔A.B(1<;=A<;=B<;=1,000,000)内挤奶,这包括A和B的倍数。显然,FJ必须创建一个预约系统,以确定每头奶牛可以分配给她的挤奶时间的摊位。当然,没有一头母牛会与其他母牛分享如此私密的时刻。
通过确定以下内容来帮助FJ:
牛棚中所需的最低摊位数目,以便每头奶牛都能有自己的私人挤奶时间。
随着时间的推移,奶牛被分配到这些货摊上。
对于每个测试数据集,许多答案都是正确的;一个程序将对您的答案进行评分。
输入。
第1行:单个整数,N。
行2.N+1:行I+1用两个空格分隔的整数描述COW I的挤奶间隔。
输出量。
第1行:谷仓必须有的最小摊位数量。
行2.N+1:行I+1描述了奶牛挤奶期间我将被分配到的奶牛栏。
Sample Input
5
1 10
2 4
3 6
5 8
4 7
Sample Output
4
1
2
3
2
4
这道题 的意思是,n头牛,每个牛必须在固定时间吃草且一牛一窝,问最少多少窝,且每头牛是在第几个窝吃的草
可以把每当开了一个窝,变把这个窝存入到以这个窝正在吃草的牛的结束时间进行从小到大排序,优先队列重载一下就ok了
1 while(pque.empty()!=1) 2 pque.pop(); 3 4 for(int i=1;i<=n;++i) 5 { 6 cin>>v[i].l>>v[i].r; 7 v[i].pos=i; 8 } 9 10 sort(v+1,v+1+n,cmp); 11 12 pque.push(v[1]); 13 hhh[v[1].pos]=1; 14 int ans=1; 15 for(int i=2;i<=n;++i) 16 { 17 node temp=pque.top(); 18 if(v[i].l>temp.r) //另外开个窝 19 { 20 hhh[v[i].pos]=hhh[temp.pos]; 21 pque.pop(); 22 pque.push(v[i]); 23 } 24 else 25 { 26 ans++; 27 hhh[v[i].pos]=ans; //记录位置 28 pque.push(v[i]); 29 } 30 }