作者:H_D_NULL


不是我说,还是外国的题出得简单一些


首先分析题面,第一眼觉得是一个贪心。然后仔细看了一下,居然是一个环!太不好贪心了。还有段与段之间还有包含关系,不能支持简单的贪心。最后总体分析了一下,得出本题最大的难点:那是什么鬼图啊?!

经过以上分析,我们不难得出本题的做法:贪心


大体贪心策略: 管他是不是环,对于当前已选的,只要找到一类围栏,使其起始端点在已选围栏的包含范围之内(或刚好能接上),然后在这些围栏里,找延伸得最远的(及右端点的值越大的)。正确性不难证明,只是复杂度暂时有些问题。枚举要选的第一个围栏,然后如上述策略贪心地加围栏,直到形成一个环。

进一步优化: 策略是没得优化了,关键就看能不能用更少的时间。大多数的人的做法(特指某篇题解)是只预处理对于选了某一条边的情况,下一次贪心选的边,这样做完全没有问题,但是没有逼格 。而有些人(特指另一篇)给我们提供了更优的思路——倍增 。用类似找LCA的方法,可以快速找到从一段围栏出发,到结束所用的最少围栏数。P.S. 似乎加了倍增优化和暴力跳边实际的时间差距不大?

Talk is cheap, show me the code.

#include<bits/stdc++.h>
#define re register
#define Maxm 100005
using namespace std;int C,M,Ans=Maxm,tot;inline int read(){re int ret=0;re char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();return ret;
}struct dr{int L,R;int Nxt[20];
} t1[Maxm],t[Maxm<<1];inline bool cmp(dr x,dr y){return x.L<y.L;
}int main(){C=read();M=read();for(re int i=1;i<=M;i++){t1[i].L=read();t1[i].R=t1[i].L+read();}sort(t1+1,t1+1+M,cmp);for(re int i=1;i<=M;i++){ //去重(目测有大用)if(t1[i].R>t[tot].R){t[++tot]=t1[i];}}M=tot;for(re int i=1;i<=M;i++){t[i+M].L=t[i].L+C;t[i+M].R=t[i].R+C;}re int tmp=1;for(re int i=1;i<=M<<1;i++){t[i].Nxt[0]=t[i-1].Nxt[0];for(;tmp<=M<<1&&t[tmp].L<=t[i].R;tmp++){ //贪心:找直接接在自己后面的那条围栏if(t[tmp].R>t[t[i].Nxt[0]].R) t[i].Nxt[0]=tmp;}}for(re int i=M<<1;i;i--){ //预处理倍增数组for(re int j=1;j<=18&&t[t[i].Nxt[j-1]].Nxt[j-1];j++){t[i].Nxt[j]=t[t[i].Nxt[j-1]].Nxt[j-1];}}for(re int i=1,sum,now;i<=M;i++){sum=1; now=i;for(re int j=18;j>=0;j--){ //倍增从大往小找if(t[now].Nxt[j]&&t[t[now].Nxt[j]].R-t[i].L<C){now=t[now].Nxt[j];sum+=1<<j;}}if(t[now].Nxt[0]&&t[now].R-t[i].L<C){sum++; now=t[now].Nxt[0];}if(t[now].R-t[i].L>=C) Ans=min(Ans,sum);}printf("%d",Ans);return 0;
}

本文链接:17.[USACO10FEB]Covering the Corral G

17.[USACO10FEB]Covering the Corral G相关推荐

  1. DELL Software contest 2014 H题 1007 Covering the Corral

    题目: Covering the Corral Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java ...

  2. 2021-2027全球及中国G Suite销售软件行业研究及十四五规划分析报告

    2021-2027全球及中国G Suite销售软件行业研究及十四五规划分析报告 2019年,全球G Suite销售软件市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为x ...

  3. 2021-2027全球及中国G Suite教学资源软件行业研究及十四五规划分析报告

    2021-2027全球及中国G Suite教学资源软件行业研究及十四五规划分析报告 2019年,全球G Suite教学资源软件市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAG ...

  4. 2021-2027全球及中国G Suit营销软件行业研究及十四五规划分析报告

    2021-2027全球及中国G Suit营销软件行业研究及十四五规划分析报告 2019年,全球G Suit营销软件市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为xx% ...

  5. 2021-2027全球及中国G Suite市场软件行业研究及十四五规划分析报告

    2021-2027全球及中国G Suite市场软件行业研究及十四五规划分析报告 2019年,全球G Suite市场软件市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为x ...

  6. 2021-2027全球及中国G Suite商业工具行业研究及十四五规划分析报告

    2021-2027全球及中国G Suite商业工具行业研究及十四五规划分析报告 2019年,全球G Suite商业工具市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为x ...

  7. 现代c++:MacOS VSCode配置c++17环境

    时代在发展,本科的时候学的c++已经不是现在的c++了,于是重新学习c++17.今天第一次用VSCode运行c++ 17,发现需要配置一下编译器才能运行. 现代c++:MacOS VSCode配置c+ ...

  8. 2021-2027全球及中国G Suite开发工具行业研究及十四五规划分析报告

    2021-2027全球及中国G Suite开发工具行业研究及十四五规划分析报告 2019年,全球G Suite开发工具市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为x ...

  9. CMake Error: Could not create named generator Visual Studio 17 2022 win32

    环境: VS2022&cocos2d-x 4.0 & Win10 64位 解决方法 ①Cmake 不是最新版本 , 卸载安装最新版本 ② 可以试试以下几条命令 肯定有一个合适: 如果你 ...

最新文章

  1. 通俗易懂:快速理解ipv4的NAT穿透原理
  2. 对计算属性中get和set的理解
  3. Android 启动过程详解
  4. Programming Computer Vision with Python (学习笔记十二)
  5. 使用WPF动画编程的几点注意事项[转]
  6. 检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005...
  7. 入门 | 初学者必读:解读14个深度学习关键词
  8. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...
  9. echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图
  10. Linux 命令行上执行多个命令(分隔符简介使用)
  11. Web前端Javascript笔记(6)正则表达式
  12. 微信开发经常会用到的一些方法
  13. 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
  14. 拓端tecdat:数据评估三方科技公司开发人员能力
  15. 热烈庆贺:一个月,由70名升级为60名!
  16. 印前软件 数码打样 管理软件
  17. java扫描器创建,老司机帮您Java 创建条形码扫描器
  18. CVPR2022Oral专题系列(二):多帧图像合成与增强
  19. 网站的pv、uv、ip分别是什么意思
  20. HTTP 错误 404.5 - Not Found

热门文章

  1. 明日之后找回原来的服务器,明日之后怎么找回原来的账号
  2. 英语语法长难句——名词性从句
  3. 数据安全技术研究国外
  4. Linux CFS调度器:原理和实现
  5. Qt使用vlc多窗口播放同一个视频
  6. 运动控制卡的函数库与Linux,运动控制卡应用开发教程之使用Qt
  7. 汇编语言--div指令,伪指令dd
  8. 高博SLAM基础课第五讲——PnP非线性优化
  9. RecyclerView 梳理:点击长按事件、分割线、拖曳排序、滑动删除
  10. 用计算机术语赞美老师,【用一句话赞美各个学科】_赞美各学科老师的对联