二分法
文章平均质量分 71
冷月残星
这个作者很懒,什么都没留下…
展开
-
最大流,二分法,拆点法(士兵移动 uva 12264)
给n个点的无权无向图(n0则此点归你且上面有ai个属于你的士兵。保证至少有一个属于你的点与敌方的点相邻。你可以让你的每个士兵最多移动一次,每次可以待在原地或者去到相邻的属于你的领地,但每个点至少要留1各士兵,使得最薄弱的关口尽量坚固。关口是指与敌方点相邻的点,薄弱与坚固分别指兵少与兵多。我参考了这篇博客上的一些讲解。http://www.voidcn.com/blog/a197p/ar转载 2016-07-14 00:27:25 · 1857 阅读 · 1 评论 -
贪心,二分,半平面交(丛林警戒队,LA 4992)
RE的6种可能1、数组开小了2、数组越界了3、除0了4、递归爆栈了5、指针6、申请空间过多了。还是感觉自己有问题,码得太多,想的太少,实践得更少。自己先跟自己玩玩攻防游戏,多玩几盘,就知道正确的防守方法了,然后思路与代码就是分分钟的事情。先抛开代码与算法不管,然后搞出一种手算的解决方案(像玩单机游戏那样去不断尝试),最后再想办法用代码去实现。原创 2017-02-02 20:41:05 · 386 阅读 · 0 评论 -
半平面的交,二分法(离海最远的点,LA 3890)
太菜啦,这都不会。。。点到海的距离是点到海的最小距离,然后想让这个值最大。想到了啥?不就是应该用二分吗?太菜了。把这个n个点的凸多边形的岛看做n个半平面的交。二分距离,检查是否存在一个距离海这么远的点,具体做法就是将所有半平面对应的直线往左边移动这么远,然后看看交是否为空即可。代码#includeusing namespace std;const int m原创 2017-02-01 20:42:02 · 292 阅读 · 0 评论 -
朱刘算法,二分法(比赛网络,UVA 11865)
最小值最大 =====> 二分法二分最小宽带值m,建图,图中的有向边宽带值均不小于m。然后跑朱刘算法,如果无法建图或者花费过高,那么就放宽条件(减小最小宽带值),如果条件无限宽还不行(m==1),那就不可能了,否则输出结果。朱刘算法模板:http://blog.csdn.net/leolin_/article/details/6751867原创 2017-02-12 21:19:37 · 224 阅读 · 0 评论 -
自适应辛普森法,曲线积分,二分法(桥上的绳索,LA 3485)
就是本题让我又翻出了半年未动的数学分析讲义,把曲线积分以及不定积分又复习了一遍。如果已知函数值想求自变量而反函数又难以解出的话,可以利用函数的一些性质,比如单调性,然后二分自变量求解。如果是单峰函数的话,可以先三分求出极值点,然后转化成两个单调函数。其他就是纯数学问题了。代码#includeusing namespace std;const doub原创 2016-12-08 15:48:12 · 745 阅读 · 0 评论 -
二分法(解方程,UVA 10341)
观察后发现函数在[0,1]是单调减函数,如果f(0)>=0且f(1)原创 2016-12-07 17:49:35 · 285 阅读 · 0 评论 -
【2016-CCPC-C】二分,动脑筋(Car,hdu 5935)
比赛时看时间和路程都是整数,因此觉得速度也会是整数,因此走上了求因数的不归路。后来才知道速度也可以是小数的。之所以会这样,只能说自己太浮躁吧。就像在用蛮力。其实自己做事可以细致一点,四两拨千斤。后来看了别人说可以取小数,就用二分来求,然后超时。后来优化了下二分范围,然后就过了。936ms/1000ms。说明很多时候,像这种解法多样的题目,你可能会因为解法不够优秀而徘徊在超时的边缘,原创 2016-10-29 23:27:38 · 297 阅读 · 0 评论 -
二分,枚举+查找(子序列,LA 2678)
一开始二分,一直WA,怀疑是因为lower_bound,找不到结果时返回n+1。所以把答案%(n+1),然后就过了。看大白书上说找不到就输出0,可是看了好几遍原题,上面没有说啊喂,怎么可以这样QAQ。大白书上有O(n)的解法,就是枚举+查找的思路,查找时优化了一下使得总时间为O(n)。典型的思路,枚举一个量,对另一个量进行查找,可以是lower_bound,O(nlogn),也原创 2016-10-26 21:50:12 · 494 阅读 · 0 评论 -
二分(长城守卫,LA 3177)
一看到这题,以为是数学,真的不会。事实上这是算法比赛,数学题不一定要用数学的解法。你看这题,要你找某个尽量小的值来满足一些事。简直就是明示你二分啊。而且满足不满足是连续的,因此用lower_bound。一直觉得一定是有某个公式算出答案。其实没有那么多公式化的东西,更重要的是解决问题。如果实在没有头绪,那就自己给自己出几个题目,想尽各种办法先得到答案,也许你就会找到规律,从而找到能用原创 2016-10-24 17:54:14 · 546 阅读 · 1 评论 -
二分(派,LA 3635)
一开始想用讨论的方式来解决,然后发现情况非常复杂而且有些地方没法用讨论解决。只能判断且很好判断一个值是否可行,然而却没法很直观的求出最优解。那就二分吧。代码#include#define maxn 10010using namespace std;const double PI=acos(-1);const double eps=1e-4;int N,F;doubl原创 2016-10-23 23:56:10 · 330 阅读 · 0 评论 -
二分+判断,最小值最大(组装电脑,LA 3971)
一开始啊,用map和priority_queue搞来搞去,各种upper_bound啊,维护单调啊什么鬼的,编码又麻烦,速度也不快,还WA。具体就是先把所有的部件都买一个最便宜的,然后放到优先队列里,每次取一个quality最小的,换成一个更大的。因为更大的反而可能更便宜(除了第一次更换一定更贵),所以要维护单调。想效率高点所以用upper_bound。弄了好久都没过,就只好用紫书大白书上的方原创 2016-10-23 20:02:40 · 362 阅读 · 0 评论 -
高效(防线,uva 1471)
参考 http://blog.csdn.net/L123012013048/article/details/45054857一开始用set弄,erase弄超时了。后半部分的方法十分不错。一方面思路用二分搜索代替了暴力枚举。另一方面,这种技巧有时能代替低效的set,大大提高效率,今后解题都可以参考。前面的滑窗也有许多小细节需要处理。#includeusi转载 2016-09-07 19:48:15 · 550 阅读 · 0 评论 -
二分法,互动(猜长方形,cf 713B)
第一次做互动的问题。就是你输出一次,它输入一次,它的输入是根据你的输出决定的。给一个n*n的格子(2因为两个长方形不重叠,因此你总可以或横着切一刀,或竖着切一刀,把这个n*n的格子分成两部分,一部分有且只有一个长方形。那就横着二分一下,找不到就竖着二分一下。然后问题就转换为两个相同的更简单的问题:在一个格子内确定一个长方形的位置。分别二分上下左右边界,然后就找到原创 2016-09-14 21:52:56 · 427 阅读 · 0 评论 -
二分(Gates,uva 1607)
虽然AC了。但是我认为这道题是有问题的。紫书上说:先把x设为0,再把x设为1,如果二者的输出相同,整个电路肯定是常数,任意输出一种方案即可。可是事实上并不是这样。比如这组数据16 5-2 -3 -4 -5 -1 1 -6 2 3 4满足紫书上的条件,然而整个电路却并不是常数。加入如下的代码来debug。for(int i=0;i<=n;i++)原创 2016-09-13 12:10:46 · 612 阅读 · 2 评论 -
二分,贪心(Copying Books,uva 714)
最大值尽量小,二分加判断可不可行。这个方法十分重要。判断方法用贪心。一些优化:二分的左边界为最大值,二分的右边界为和。判断时发现不可行立刻返回。字典序最小,从右往左贪心即可,因为若右边的多拿了左边的东西,那么左边就有机会拿更左边的东西。分组不能为空集,所以贪心到后面组不够了,那就直接一人一组。搞了很久,因为一些算法有问题,所以有死循环没发现。代码原创 2016-09-12 17:21:16 · 314 阅读 · 0 评论 -
二分,讨论(Median,HDU 5857)
感觉这场多校的题目不是小学数学就是初中英语,而且我都不会。。我用二分做的,WA了很久,最后靠对拍过的。如果用二分做的话细节太多了,很容易出错。看到网上大部分解法都是讨论。以后应该要给自己找一个实现起来比较简单的算法。代码#include#includeusing namespace std;const int maxn = 100010;int原创 2017-07-23 19:44:44 · 247 阅读 · 0 评论