某题的弱化版…
我觉得是挺神的,考场上只想出了线性规划然而不会写了x
首先我们有一个结论:我们可以把切割线分配到点上去,这样只要一条线段两边的点的权值和分别大于等于线段权值即可。
然后所有点的权值和+1/2就是答案下界,并可以证明这个下界是可以达到的。
因此问题转化成分配点权,使得总权值最小。
然后此题权值都是1,每两个同色点之间都要有一个切割点,可以贪心地让每两个相邻的切割点之间没有同色点来实现
直接枚举一个起点,拆环成链,这样是O(n2)O(n2)O(n^2)的,但是我们注意到相邻最近的点对之间必有一个切割点,设他们之间距离为d,那么我们只需枚举这d个点即可,每一次贪心的复杂度可以做到O(n/d)O(n/d)O(n/d),需要预处理一下每个点往后延伸的最远距离。总的复杂度就是O(n)O(n)O(n)了。

菜到不想说话qaq

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 400010
inline char gc(){static char buf[1<<16],*S,*T;if(T==S){T=(S=buf)+fread(buf,1,1<<16,stdin);if(T==S) return EOF;}return *S++;
}
inline int read(){int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=gc();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc();return x*f;
}
int n,nxt[N<<1],ans=inf,opp[N<<1];
inline int calc(int x){int res=0,ed=n+x-1;while(1){if(x>ed) break;++res;x=nxt[x];}return res+1>>1;
}
int main(){
//  freopen("a.in","r",stdin);n=read()*2;int sx=1,sy=n;for(int i=1;i<=n/2;++i){int x=read(),y=read();if(x>y) swap(x,y);if(y-x<sy-sx) sx=x,sy=y;opp[x]=y;opp[y]=n+x;opp[n+x]=n+y;opp[n+y]=2*n+1;}nxt[2*n]=2*n+1;for(int i=n*2-1;i;--i) nxt[i]=min(opp[i],nxt[i+1]);for(int i=sx+1;i<=sy;++i) ans=min(ans,calc(i));printf("%d\n",ans);return 0;
}

luoguT30208 太极剑(贪心)相关推荐

  1. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  2. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  3. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  4. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

  5. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  6. 贪心:expedition 最优加油方法

    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加 油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起 始时刻油箱中汽油量P;假设使用1个单位的汽油即走1个 ...

  7. 贪心:Burst Balloons 最少次数完成射击气球

    已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓 ...

  8. 贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少 ...

  9. 贪心:Jump Game 跳跃游戏

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是t ...

  10. 贪心:remove K digits移除K个数字

    问题描述: 已知一个使用字符串表示的非负整数num,将num中的k个数字移 除,求移除k个数字后,可以获得的最小的可能的新数字. 例如:num = "1432219" , k = ...

最新文章

  1. 关于Advanced Installer 11.0打包软件过程一些记录
  2. 说说进程与线程的区别与联系
  3. 【mysql】使用tpcc-mysql进行压力测试
  4. jmeter学习笔记(八-1)
  5. 如何将风险应用加入白名单_理财要如何将资金分散呢?可以参考风险分散和分享经济红利的思路...
  6. textarea的光标自动居左的问题
  7. Java的书写汽车价格_ES Java API_基于mget实现多辆汽车的配置与价格对比
  8. JavaScript的可变参数介绍
  9. 趣味思考--苹果剩余最大量
  10. Java 任务调度,分布式定时任务XXL-JOB,elastic-job
  11. 在LUA中使用异步IO的思考
  12. 【kaggle注册页面没有显示验证码】
  13. OSEK网络管理入门
  14. 微信小程序云开发教程-云数据库
  15. 学数据分析到底要不要掌握Linux-Python基础前传(2)
  16. qq输入法自定义短语并在手机qq输入法使用
  17. Android开发实用小工具二——长度转换工具
  18. linux 建树软件,新一代建树工具IQ-Tree介绍
  19. jfif格式怎么改成jpg或png格式?
  20. Ubuntu U盘权限只读的解决方案

热门文章

  1. 一、肿瘤全基因组分析概况(Pan-cancer analysis of whole genomes,PCAWG)
  2. Markdown缩进控制
  3. 计算机专业英语中常见的前缀和后缀,专业英语词根与前后缀.ppt
  4. 人可以活得更用力一些
  5. 秋招知识点总结-Redis数据库
  6. 想学Python爬虫么?很简单的鸭~第二课
  7. Google Chrome v90.0.4430.212 正式版下载
  8. C# 经纬度格式化输入控件的简单实现(附html、Qt实现)
  9. oracle异常策略,oracle segmentation fault错误
  10. adb命令之service call