技巧(二分/三分/尺取/离散化/线扫描/打表/预处理...)
文章平均质量分 79
ccDLlyy
不忘初心,方得始终
展开
-
抽签
题目描述:将写有数字的n个字片放入口袋,从口袋中抽取四次,每次记下数字,然后放回。问是否存在四个数字满足相加和为m法一:普通迭代,复杂度O(n^4)#include #include using namespace std;int main(){ int n,m,array[105]; cin>>n>>m; for(int i=0;i<n;i++){ cin>>array[原创 2017-01-30 21:32:13 · 588 阅读 · 0 评论 -
LightOJ 1048 Conquering Keokradong(二分+贪心)
题目链接:点击打开链接题意:给出n,k,然后给出n + 1个数,把这n + 1个数组合成k + 1组,组内、组间必须是连续的,问怎么组合,最大 组内和 取最小?而且组合时,第一组组内和要尽可能的大,第二组组内和再尽可能的大,以此类推......思路:由题意,n >= k,所以n + 1个数,组合成k + 1组是一定有解的,这点不用做特殊判断。在此基础上,再考虑前面组的组内值尽可能的大,那么原创 2017-08-11 11:16:10 · 404 阅读 · 0 评论 -
HDU 1542 Atlantis(矩形面积并,线段树+离散化+线扫描)
题目链接:点击打开链接题意:矩形面积并思路:由于数据较大,浮点数先要离散化;然后把矩形分成两类边,上边和下边,相关信息存到结构体中;对离散化后的横轴建线段树,然后对于每条边,自下而上扫描上去,每次扫描到的块为当前边与下一条边之间的块,sum代表区间内被覆盖的线段的长度总和,那么sum[1]就表示当前块 线段(横轴)的总长度,每次处理用sum[1] * 当前块height就是该块面积;这原创 2017-08-01 17:45:02 · 385 阅读 · 0 评论 -
POJ 2528 Mayor's posters(线段树+离散化)
题目链接:点击打开链接题意:在墙上贴海报,海报可以相互重叠,问最后可以看到几张海报思路:可以采用线段树,按照贴海报的顺序去更新线段树染色,最后查询整个区间的染色数即为所求;但是数据太大,所以需要离散化。离散化简单的来说就是只取我们需要的值来用,复杂度就大大的降下来了。离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多而这题的难点在于每个数字其实表示的是原创 2017-07-31 23:40:13 · 342 阅读 · 0 评论 -
2017百度之星初赛(B) 1006 小小粉丝度度熊(尺取法)
题目链接:点击打开链接思路:先将区间处理成不相交区间,补签肯定是要选择相邻的空隙,这样才能使分散的天数连起来从而最大化签到天数,然后再考虑,具体要如何选择呢?DP?看不出状态转移;贪心?局部最优解规则不明显,优先选择签到天数多的或者优先选择空隙大的去补签都不正确;这样看,此题该采用枚举之类的做法?难道暴力枚举被选择空隙的范围?肯定不可以,这样复杂度达到了O(n ^ 2),会超时;其实这里枚举空原创 2017-08-15 22:31:47 · 564 阅读 · 0 评论 -
Wannafly模拟赛3 反蝴蝶效应
题目链接:点击打开链接思路:水题,答案为max{ Ai + i },i从0开始。#include #include #include #include using namespace std;int main(){ int n, t, re; while (scanf("%d", &n) != EOF) { re = -1; for (int i = 0; i < n原创 2017-10-10 10:09:02 · 540 阅读 · 0 评论 -
Wannafly模拟赛3 绝对半径2051(离散化+尺取法)
思路:题目求的为最大的连续相同数字的长度,也就是说,若把相同数字分到一组,组间没有太大联系,联系只发生在组内数字的相对位置上,那么就把每组数字的位置存储下来分别处理,因为数字最大可以到10^9,数组开不下,但n最大只有10^5,所以可以把这些数字映射到10^5内。具体处理每组数字时,可以采用尺取法,也可以理解为贪心求解,对于每个le,rig在条件限制内最大可能的右移使区间最大。// 绝对半径2原创 2017-10-10 20:06:14 · 450 阅读 · 0 评论 -
CodeForces 672D Robin Hood(二分 + 思维)
题目链接:点击打开链接题意:有n个人,每个人都有一定数量的硬币, 每天硬币最多的人会把自己的一个硬币赠给硬币最少的人,问k天之后硬币最多的人和硬币最少的人的硬币数量之差为多少?思路:k最大为10^9,暴力模拟的话,肯定会超时。此题的正解为二分加思维,二分出最多硬币数和最少硬币数,两者相减得到结果。二分之前先确定最多硬币数的下界和最少硬币数的上界,如果总硬币数sum能整除人数n,最多硬币数的原创 2017-12-09 21:00:32 · 496 阅读 · 0 评论