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

Ayanami
这个家伙很菜,什么也没有留下搬运于
2025-08-24 21:32:39,当前版本为作者最后更新于2019-11-06 11:26:55,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
贪心思想
对于每个声部按照右端点从小到大排序
然后从每个右端点往左发话筒直到该声部话筒数量足够

(每种颜色表示一个声部)
可以证明这样能使重复部分的话筒最多,因为按右端点排序后每个声部与它之后的声部的重复(如果有)一定会从最右边开始
代码打出来还是很容易的
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,m,ans=0,s,a; struct node { int l,r,t; } x[10001];//结构体 bool z[30001]={0};//记录该位置是否有话筒 bool cmp(node x,node y) { return x.r<y.r;//按右端点排序 } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&x[i].l,&x[i].r,&x[i].t); } sort(x+1,x+m+1,cmp);//排序 for(int i=1;i<=m;i++) { a=0;//计数 //先扫一遍统计该声部现有话筒个数 for(int j=x[i].l;j<=x[i].r;j++) { if(z[j]) { a++; } } //从尾巴开始放 for(int j=x[i].r;j>=x[i].l;j--) { //够了就退出 if(a>=x[i].t) { break; } //这里没有话筒就放一个 if(!z[j]) { a++; ans++; z[j]=1; } } } printf("%d",ans); }P.S 论这题的颜色
做法 完 · 全 · 一 · 致
三倍经验众所周知黄色和蓝色混起来是绿色所以这是道绿题又众所周知你谷上绿题难度在黄蓝之间所以取平均值这题还是绿的大雾
所以这题为什么是蓝的
- 1
信息
- ID
- 952
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者