POJ 3190 Stall Reservations
题意:
题意:一群很有个性的奶牛,只在固定的时间产奶,每头牛需要用一个挤奶机器,问为满足所有牛产奶,最少需要多少个挤奶机器,并按照奶牛给出的顺序来输出该奶牛挤奶机器的编号。
思路:
按先开始数据,后结束时间从小到大排序,优先队列维护当前在产奶的奶牛,若队列中结束时间>=开始时间,则要加一台机器。
算法:
贪心+优先队列
代码:
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> using namespace std; struct F { int b,e,id; friend bool operator<(F a,F b) { if(a.e==b.e) return a.b<b.b; return a.e>b.e; } }a[100005]; bool cmp(F A,F B) { if (A.b==B.b) return A.e<B.e; return A.b<B.b; } priority_queue<F>q; int sta[100005]; int main() { int n,i,j; cin>>n; for (i=1;i<=n;i++) { scanf("%d%d",&a[i].b,&a[i].e); a[i].id=i; } sort(a+1,a+n+1,cmp); q.push(a[1]); int ans=1; sta[a[1].id]=1; for (i=2;i<=n;i++) { if (!q.empty()&&q.top().e<a[i].b) { sta[a[i].id]=sta[q.top().id]; q.pop(); q.push(a[i]); } else { ans++; sta[a[i].id]=ans; q.push(a[i]); } } cout<<ans<<endl; for (i=1;i<=n;i++) { cout<<sta[i]<<endl; } return 0; }
蒟蒻的饮品店
————欢迎大家光临

浙公网安备 33010602011771号