标签:cin highlight for EDA pac hellip 题目 个数 指定
9
4
1 4 2
4 6 2
8 9 2
3 5 2
5
#include<bits/stdc++.h> using namespace std; struct X{//结构体 int b,e,t; }a[5005]; bool cmp(X x,X y)//这不是问题的关键 { if(x.e!=y.e) return x.e<y.e; return x.b>y.b; } bool xyds[30005]; int main() { int n,h; cin>>n>>h; for(int i=1;i<=h;i++) cin>>a[i].b>>a[i].e>>a[i].t; sort(a,a+h+1,cmp);//结构体排序 int ans=0; for(int i=1;i<=h;i++) { int B=a[i].b,E=a[i].e,T=a[i].t; for(int j=B;j<=E;j++) { if(xyds[j]) T--;//扣除已种的树 } if(T>0) { for(int j=E;j>=B;j--) { if(!xyds[j]) T--,xyds[j]=1,ans++;//在右端种树 if(!T) break; } } } cout<<ans; return 0; }
贪心即可解决(俺不会差分约束555)。结构体sort排序即可解决(这不是问题的关键)。思路:首先按照区间的结束位置(b)从小到大排序,若结束位置相同,则按照起始位置(e)从大到小排序(可用sort解决);然后就优先在区间的尾部种树,数量为总数(t)减去已种数量。另外需要用bool数组标记已种树的位置,防止重复种树。最终输出ans即可。
标签:cin highlight for EDA pac hellip 题目 个数 指定
原文地址:https://www.cnblogs.com/dong-ji-yuan/p/11155866.html