1 条题解
-
0
自动搬运
来自洛谷,原作者为

shadowcat
**搬运于
2025-08-24 21:27:28,当前版本为作者最后更新于2018-05-22 20:12:41,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本题与P1986 元旦晚会 相类似,大意是选择一些数,满足在 [Li,Ri]中至少有Ci个数。我们可以将所有的区间按右端点的大小,从小到大排列。如果当前区间已经满足了它的要求,那么它其中的数的位置可以随意摆放,又因为它之后的区间的右端点的值比当前区间右端点大,所以我们贪心地选择当前区间最右端的数,可以尽量满足后面区间的条件。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,vis[30005],ans; struct node { int l,r,c; }a[30005]; int cmp(node a,node b) { return a.r<b.r; } int main() { scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].c); } sort(a+1,a+1+m,cmp); for(int i=1;i<=m;i++) { int cnt=0; for(int j=a[i].l;j<=a[i].r;j++) { if(vis[j]) cnt++; } if(cnt<a[i].c) { for(int j=a[i].r;j>=a[i].l;j--) { if(!vis[j]) { cnt++; ans++; vis[j]=1; if(cnt==a[i].c) break; } } } } cout<<ans; return 0; }
- 1
信息
- ID
- 637
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者