D. Winter Is Coming(连通块贪心合并)
发布日期:2021-06-30 10:18:11
浏览次数:2
分类:技术文章
本文共 1130 字,大约阅读时间需要 3 分钟。
思路大体相同,可惜最后没有特判结尾
因 为 负 数 温 度 形 成 一 个 一 个 的 连 通 块 因为负数温度形成一个一个的连通块 因为负数温度形成一个一个的连通块
那 么 一 开 始 假 设 最 坏 , 在 每 个 连 通 块 的 开 始 换 冬 季 轮 胎 那么一开始假设最坏,在每个连通块的开始换冬季轮胎 那么一开始假设最坏,在每个连通块的开始换冬季轮胎
在 每 个 连 通 块 的 结 尾 换 夏 季 轮 胎 在每个连通块的结尾换夏季轮胎 在每个连通块的结尾换夏季轮胎
接 下 来 发 现 连 通 块 之 间 假 如 不 换 任 何 轮 胎 可 以 减 少 2 次 换 轮 胎 次 数 接下来发现连通块之间假如不换任何轮胎可以减少2次换轮胎次数 接下来发现连通块之间假如不换任何轮胎可以减少2次换轮胎次数
但 是 这 样 会 让 冬 季 轮 胎 多 用 几 天 但是这样会让冬季轮胎多用几天 但是这样会让冬季轮胎多用几天
所 以 把 所 有 连 通 块 的 间 隔 天 数 扔 进 优 先 队 列 即 可 所以把所有连通块的间隔天数扔进优先队列即可 所以把所有连通块的间隔天数扔进优先队列即可
但是注意,最后一次可能可以直接用到结尾,特判
#includeusing namespace std;const int maxn=2e5+10;int n,m,a[maxn],top;struct p{ int l,r;}id[maxn];priority_queue ,greater >q;int main(){ cin >> n >> m; for(int i=1;i<=n;i++) cin >> a[i]; for(int i=1;i<=n;i++) { if(a[i]<0) { id[++top].l=i; while(a[i]<0) { id[top].r=i; i++; } m-=(id[top].r-id[top].l+1); i--; } } int ans=top*2; if(m<0) { cout<<-1; return 0; } for(int i=2;i<=top;i++) q.push(id[i].l-id[i-1].r-1); while( !q.empty() ) { int minn=q.top(); q.pop(); if(m-minn>=0) m-=minn,ans-=2; else break; } if(top&&m>=(n-id[top].r)) ans--; cout<
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107280570 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月26日 00时45分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Table 'mysql.user' doesn't exist
2019-04-30
mysql通过frm文件查找表结构定义
2019-04-30
如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
2019-04-30
oracle随机数的产生
2019-04-30
oracle分级汇总rollup
2019-04-30
oracle数据库translate函数
2019-04-30
oracle修改日期的显示方式
2019-04-30
inotify的安装
2019-04-30
mysqladmin创建数据库
2019-04-30
DbUtil的介绍使用
2019-04-30
DbUtil异步更新AsyncQueryRunner
2019-04-30
java判断中文汉字工具类
2019-04-30
DbUtils里的ResultSetHandler处理器应用
2019-04-30
Apache WEB服务器启用了OPTIONS方法
2019-04-30
配置文件中的数据库密码加密
2019-04-30
tailf报错limit of inotify watches was reached
2019-04-30
Solr控制台索引维护-删除索引
2019-04-30
ping结果的相关知识点,tracert命令验证
2019-04-30
ARP欺骗原理与模拟
2019-04-30