二分答案
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
6.24NOI 模拟赛
A.小w、小j和小z 我可能是个傻子,两个人i,j相撞的要求就是 si<sj,ti>tj或者si>sj,ti<tjsi<sj,ti>tj或者si>sj,ti<tjsitj或者si>sj,tiO(logwnk)O(logwnk)O(logwnk)水了80,其实按s排序之后不就是问你最少删掉几个使得剩下的序列为上升序列嘛…直接求个lis就好了 复杂...原创 2018-06-24 23:03:03 · 336 阅读 · 0 评论 -
bzoj4556 [Tjoi2016&Heoi2016]字符串(SA+二分答案+线段树)
给定一个串S,每次询问S[a..b]中的子串与S[c..d]的lcp的最大值。子串其实就可以当做后缀。那么每次就是求后缀[a..b]与c的lcp最大值。我们考虑二分答案ans,用SA处理出h数组,那么就可以再二分答案得到c向前向后拓展的最远距离。即[l..r]中的串与c的lcp都>=ans,然后我们就要看这些串中是否有合法的,即是否存在一个串的下标在[a…b-ans+1]之间。这怎么判断呢?我们可以原创 2018-03-29 21:24:37 · 351 阅读 · 0 评论 -
bzoj1567 [JSOI2008]Blue Mary的战役地图(二维hash+二分答案)
二维hash,然后二分最长公共正方形的边长,把a的都扔到map里,然后用b的去查询有没有。复杂度O(n2log2n)O(n^2log^2n)原创 2018-03-20 09:39:25 · 263 阅读 · 0 评论 -
bzoj1052 [HAOI2007]覆盖问题(二分答案+贪心)
给出平面上一些点,现在要用3个L*L的正方形去覆盖他们,问L最小为多少。二分答案,我们每次求出现在所剩点的最小覆盖矩形,然后贪心地把正方形放在四个角之一,删去覆盖点,再求出所剩点的最小覆盖矩形,再贪心地放在四个角之一,删去第二个正方形所覆盖的点,看剩下的点能否被一个正方形覆盖。 复杂度O(16nlogw)O(16nlogw)原创 2018-03-23 14:54:26 · 658 阅读 · 0 评论 -
bzoj4326【2015提高】运输计划(二分答案+lca+树上差分前缀和)
这题我哪会啊。。。这题卡常,我们把每个路径的lca求一次就记录下来,每条路径的长度求出来(借助预处理得出的dis数组,dis[i]表示i到根的路径长度,则len[i][j]=dis[i]+dis[j]-2*dis[lca(i,j)])。然后按每条路径的长度从大到小排序,也许能快些( 让最大值最小问题。。二分答案,每次判定最大值<=mid是否可能。那么对于每条长度大于mid的路径我们都得给...原创 2017-10-24 21:54:35 · 531 阅读 · 0 评论 -
bzoj2097 [Usaco2010 Dec]Exercise 奶牛健美操(二分答案+贪心+树)
给你一棵树,你可以割掉S条边,问你割开之后得到的S+1棵树的直径的最大值最小是多少。 我们二分这个最大值mid,看如果要满足直径都小于等于mid需要至少割掉几条边。我们在树上贪心地求至少需要割几条边。记d[x]表示x子树中的点离fa[x]的最远距离。我们每次贪心的按儿子的d[x]从大往小割即可。原创 2018-02-20 22:55:04 · 396 阅读 · 0 评论 -
bzoj5139 [Usaco2017 Dec]Greedy Gift Takers(二分答案+模拟)
首先我们发现如果第x头牛不能拿到礼物,则x之后的所有牛也不能拿到礼物。因此我们可以二分来找到这第一头不能拿到礼物的牛。满足什么条件的牛不能拿到礼物呢?我们预处理出每头牛拿到礼物之后会出现在哪里,如果在第x头牛之前的牛们形成了一个死循环,则第x头牛就永远也拿不到礼物了。怎么样会形成一个死循环呢?出现在前i个位置的牛有多于i头,则这i头牛就会一直卡在这前i个位置。因此我们模拟一下这个过程看有没有死循环出原创 2018-02-12 21:40:48 · 864 阅读 · 3 评论 -
bzoj1758 [Wc2010]重建计划(二分答案+点分治+单调栈)
首先求一个最优比率的东西,我们二分答案,转化成判定是否存在一条合法路径使得边权和≥0.然后这个东西我们点分治去做。每次计算过x的合法路径的最大值时,为了避免不合法,我们一个子树一个子树的做。我们处理出g[i],表示目前这棵子树深度为i的点的最大距离,tmp[i]表示之前做过的子树深度为i的点的最大距离。我们每次用g[i]去询问tmp,也就是要在tmp[l-i,r-i]中选一个最大值,我们发现这就是一原创 2018-01-17 22:38:47 · 809 阅读 · 0 评论 -
bzoj3219 巡游(二分答案+点分治+单调队列)
求中位数最大的路径。我们二分答案,把>=mid的边都变成1,< mid的边都变成-1,如果有一条路径的权值和≥0,则中位数可以为mid。所以我们就是要去找一条权值和最大的路径。具体做法与bzoj1758相同。 我把leoly慢了8s啊,orz原创 2018-01-18 09:08:31 · 392 阅读 · 0 评论 -
Codeforces Hello 2018
CF913A Modular Exponentiation(模拟)CF913B Christmas Spruce(树)CF913C Party Lemonade(贪心+dp)CF913D Too Easy Problems(二分答案+贪心)原创 2018-01-09 08:46:46 · 662 阅读 · 0 评论 -
bzoj2095 [Poi2010]Bridges(二分答案+混合图欧拉回路,最大流)
这题题目描述有毒。原题是要求经过每座桥一次且一次。要求经过的最大风力的最小值。我们二分答案,每次就相当于判断一个混合图是否存在欧拉回路。注意如果一条桥断掉了,要直接返回false,因为不可能通过这座桥了。至于如何判断一个混合图是否存在欧拉回路,见这里。原创 2018-01-08 17:22:33 · 378 阅读 · 0 评论 -
bzoj1414 [ZJOI2009]对称的正方形(二分答案+二维哈希)
首先我们考虑偶数个点和奇数个点的方阵枚举中心方式不太相同,我们用类似manacher的处理方法,填上一堆0,把他们全都变成奇数的情况。然后我们枚举每一个点作为中心,二分答案找到以这个点为中心最大的合法方阵。就可以直接统计这个点对答案的贡献了。这样已经是O(n2logn)O(n^2logn)的了,我们需要O(1)判断一个方阵是否上下左右均对称。类似不用manacher求最长回文子串的方法,把这个子串镜原创 2018-01-16 17:16:56 · 549 阅读 · 0 评论 -
bzoj1014 [JSOI2008]火星人prefix(二分答案+哈希+平衡树)
我每次询问,用二分答案+hash去求lcp。 splay维护一下插入和修改。点p的hash值就是 hs[l]∗(sz[r]+1)+hs[p]∗sz[r]+hs[r]hs[l]*(sz[r]+1)+hs[p]*sz[r]+hs[r]原创 2018-01-30 18:19:04 · 386 阅读 · 0 评论 -
bzoj1822 [JSOI2010]Frozen Nova 冷冻波(计算几何+二分答案+最大流)
白天写的心不在焉的…一堆奇怪的错误。写个规范点的果然就好多了qaq首先就是巫师向他能吃到的小精灵建边,小精灵向汇建边,容量均为1.然后二分时间,算出每个巫师能吃几个精灵,由源向巫师建边,容量为算出的该巫师能吃几个精灵。如果小精灵都被吃了则合法。 然后对于一个巫师能否吃到一个小精灵,相当于我们要判断一条线段是否与给定圆相交。注意是线段!所以可能垂线段不是最小距离!需要判断一下垂线段是否与线段相交,如原创 2018-01-02 15:15:09 · 367 阅读 · 0 评论 -
bzoj1532 [POI2005]Kos-Dicing(二分答案+最大流)
二分答案,最大流判是否满流。原创 2017-12-26 10:47:55 · 389 阅读 · 0 评论 -
bzoj2258 pku2758 Checking the Text 文本校对(Hash+二分+splay)
带插入,求lcp。和bzoj1014一样。 我的splay常数是真的大【捂脸】原创 2018-03-20 20:01:51 · 297 阅读 · 0 评论 -
bzoj5251 [2018多省省队联测]劈配(网络流+贪心+二分)
我们就贪心地,对于每个人,按第一志愿第二志愿。。。试图匹配,直到能满流。 然后对于第二问我们二分一下。原创 2018-04-09 14:22:44 · 250 阅读 · 0 评论 -
bzoj1044 [HAOI2008]木棍分割(dp+二分答案+贪心)
首先我们二分答案+贪心搞出第一问的答案ans。 然后dp求方案数,f[i][j]表示前i根分成j段的方案数 我们显然有O(n2k)O(n^2k)的dp。 考虑优化,我们每一次转移实际上是一段区间的和,且这个区间单调右移,于是我们可以用一个指针来优化转移,复杂度O(nk)O(nk) 然后还要滚动数组。原创 2018-04-09 21:04:02 · 300 阅读 · 0 评论 -
bzoj2986 Non-Squarefree Numbers(Mobius函数+容斥+二分答案)
其实和bzoj2440一模一样。 就是利用Mobius函数来容斥就好了#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 500010inline char gc(){ static char buf[1<<16...原创 2018-06-22 16:57:52 · 212 阅读 · 0 评论 -
bzoj3007 拯救小云公主(二分答案+并查集)
二分答案以后就是不能经过若干圆,能否从(1,1)走到(n,m) 只要(1,m),(n,1)不连通即可。 并查集维护一波即可。 复杂度O(n2logw)O(n2logw)O(n^2logw)#include <bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long long#defi...原创 2018-06-13 23:05:39 · 657 阅读 · 0 评论 -
CF981F Round Marriage(二分答案+Hall定理)
二分答案以后就是看是否存在完美匹配。 然而直接建图肯定是gg 我们猜这个hall定理只需要区间满足即可! 如果是一条线的话那直接枚举过去就好了… 但它偏偏是一个环!然后我就gg了,各种瞎搞未果。 正确做法是把这个环拆成链qaq 把所有的点b复制一遍接在后面。 把所有的点b复制一遍接在前面。 对于每一个点a,我们得到一个区间{a-mid,a+mid} 如果a+mid>=L,那...原创 2018-05-29 23:12:02 · 1003 阅读 · 0 评论 -
bzoj4753 [Jsoi2016]最佳团体(分数规划+树形背包)
分数规划,二分答案,变成树上依赖背包。 复杂度O(nklog1e9)O(nklog1e9)O(nklog1e9)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 2510#define eps 1e-4inline char g...原创 2018-06-11 19:57:41 · 320 阅读 · 0 评论 -
bzoj5335 [TJOI2018]智力竞赛(Floyd+二分答案+匈牙利)
二分答案以后就是个最小路径覆盖。 注意要先Floyd传递闭包。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 510inline char...原创 2018-05-21 23:28:59 · 285 阅读 · 0 评论 -
bzoj4310 跳蚤(SA+二分答案+贪心)
原题描述有误,应该是把原串分成最多k个子串,然后在每个子串中挑出字典序最大的子串,使得这些串中最大的字典序最小。我们二分答案是第K小子串,用SA搞出这个串的位置,然后去贪心判定是否可行,即是否存在一种划分使得所有子串都小于等于这个串。如何贪心判定呢?首先如果有一个s[i]>s[ansl],则肯定怎么划分都不行。不然的话我们从后往前判断,如果当前串的大小超过了答案串,则必须砍一刀,我们贪心的砍在最前面原创 2018-04-28 12:43:13 · 319 阅读 · 0 评论 -
loj2555「CTSC2018」混合果汁(二分答案+主席树)
二分答案,查询最小花费即可。用主席树来维护就好啦#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 100010inline char gc(){ static char buf[1<<16],*S,*T; ...原创 2018-05-17 22:08:31 · 412 阅读 · 0 评论 -
bzoj1312 Neerc2006 Hard Life(01规划+最小割)
求最大密度子图,子图密度定义为边数/点数。 01规划,我们二分答案mid,如果E/V>midE/V>midE/V>mid,那么有E−V∗mid>0E−V∗mid>0E-V*mid>0 于是我们可以把每条边看做一个点,点权为1,每个点点权为-mid,选了一条边必须选这条边的两个端点。 那么就是求一个最大权闭合子图,看他是否>0。 最小割即可。注意此题要输出最多点...原创 2018-05-17 11:01:41 · 330 阅读 · 0 评论 -
bzoj5281 [Usaco2018 Open]Talent Show(分数规划+背包dp)
求∑wi>=W,∑ti∑wi\sum w_i>=W,\frac{\sum{t_i}}{\sum w_i}最大。 分数规划,二分答案, ∑ti∑wi>=ans\frac{\sum{t_i}}{\sum w_i}>=ans ∑ti−wi∗ans>=0\sum t_i-w_i*ans>=0 因为小数怕挂精度,我们直接ans*=1000,就是求 ∑1000∗ti−wi∗ans>=0\sum 100原创 2018-04-21 16:36:29 · 637 阅读 · 0 评论 -
bzoj5280 [Usaco2018 Open]Milking Order(二分答案+拓扑排序)
二分答案,有环就不合法。输出方案拓扑序,来个优先队列确保字典序最小。原创 2018-04-21 15:45:50 · 786 阅读 · 0 评论 -
poj2749 Building roads(二分答案+2-sat)
求任意两点间最大距离最小。我们二分答案,每次用2-sat去判定是否可行。 三种限制: 1、i,j不能连同一个。 2、i,j必须连同一个 3、i连k1,j连k2就超了的话,这俩互斥。原创 2018-04-13 17:13:19 · 260 阅读 · 0 评论 -
poj2723 Get Luffy Out(二分答案+2-sat)
二分答案,然后2-sat判定是否合法。原创 2018-04-13 16:04:48 · 165 阅读 · 0 评论 -
bzoj4552 [Tjoi2016&Heoi2016]排序(二分答案+线段树)
这题神啊orz 我们二分答案,把大于等于x的变成1,小于x的变成0。对于01序列去排序我们就可以直接得出排序结果啦!于是我们用线段树维护一下,每次把l~r升序排序,就先统计出l~r有多少个0,多少个1,然后把0都放在前面即可。降序同理。原创 2018-03-29 11:26:28 · 272 阅读 · 0 评论 -
bzoj2806 [Ctsc2012]Cheat(SAM+单调队列优化dp)
首先我们建出广义SAM,然后对于每一个询问串S,我们处理出len[i],表示最大的S[i-len[i]+1…i]可以被匹配。我们二分答案,dp判定,f[i]表示前i个字符最多匹配多少位。 f[i]=max{f[i−1],f[j]+i−j|i−len[i]<=j<=i−L}f[i]=max\{f[i-1],f[j]+i-j| i-len[i]<=j<=i-L\} j的取值范围是随着i的增大而单调右原创 2018-04-15 20:14:24 · 254 阅读 · 0 评论 -
poj2289 Jamie's Contact Groups(二分答案+最大流)
老套路了。原创 2017-12-16 20:18:10 · 768 阅读 · 1 评论 -
poj2455 Secret Milking Machine(二分答案+最大流)
二分答案,双向边网络流,反向边容量直接设为val即可。可以选择的边容量为1,跑最大流,看是否满流(是否存在K条路径)。原创 2017-12-24 20:50:52 · 343 阅读 · 0 评论 -
poj2728 Desert King(最优比率生成树,二分答案+prim)
最优比率生成树,就是01规划问题,可以用二分答案来解决。最后答案可以表示成∑iw[i]∑id[i]\frac{\sum\limits_i w[i]}{\sum\limits_id[i]},我们二分答案,如果∑iw[i]∑id[i]<mid\frac{\sum\limits_i w[i]}{\sum\limits_id[i]}<mid, 则∑iw[i]<∑id[i]∗mid\sum\limits_i原创 2017-09-30 10:22:22 · 344 阅读 · 0 评论 -
bzoj1690 [Usaco2007 Dec]奶牛的旅行(最优比率环,二分答案+spfa判负环)
做了最优比率生成树,这道题意思差不多,也是二分答案,用spfa判负环即可。原创 2017-09-30 12:57:53 · 322 阅读 · 0 评论 -
luogu1083【2012提高】借教室(二分答案+差分前缀和)
二分答案是精髓,差分前缀和代替线段树,好写又精简!原创 2017-09-21 21:39:49 · 429 阅读 · 0 评论 -
bzoj4952 [Wf2017]Need for Speed(二分答案)
题意就是解一个方程:∑ni=1disi+c=T\sum_{i=1}^n\frac{di}{si+c}=T。我们发现随着c的增大,左面的值单调递减。因此我们可以对答案二分。复杂度log21e15log_2 1e15左右吧。注意一下最小是要处理出来的。因为速度非负。原创 2017-09-03 11:26:06 · 673 阅读 · 0 评论 -
bzoj4985 评分(二分答案+dp)
这题是二分答案哟,想不到吧hh 每次判断x是否可行,把原数列转化成01序列。我们的目标是使得最后剩下的为1,则x可行。怎么判断呢?我们利用dp,dp[i]表示让i位置是1最少需要多少个额外的1(也就是说已经固定了的1不算)。对于前n个位置,因为情况是给定的,所以可以直接给初值。(原来是1,需要0个,原来是0,需要inf个,原来是未知,需要1个)对于以后的i,选取对应三个位置中的任意两个相加取最小值原创 2017-09-08 14:31:53 · 1056 阅读 · 0 评论 -
bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线(spfa+二分答案)
这题思路真是太棒了。。。二分答案,判断x是否可行时,把原来的各边权按照与x的大小关系变成0或1,(因为如果大于x了,就需要免费掉,否则可以不管),求最短路即可。如果d[n]<=k即可行。 hzwer的题解好像更清晰些: 二分答案,在判定是否可行时,只需要判断是否能寻找到一条路径,使得该路径上大于我们二分的这个值的边不超过k条,实质上就是最短路做的一个变形而已,小于二分的值的边可以看做边权为0,大原创 2017-09-07 14:59:42 · 376 阅读 · 0 评论