
其它-二分/三分
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 2756 [SCOI2012]奇怪的游戏
网络流。确实是网络流题目做太少,完全没往这方面去想。。。对棋盘进行黑白相间染色,如果记s0表示黑格子数字和,s1表示白格子数字和,t1表示黑格子数量,t2表示白格子数量,操作之后数字全都是x,那么因为黑白格子的操作次数肯定一样,有 x∗t1−s1=x∗t0−s0x*t1-s1=x*t0-s0 可以得到 x=s1−s0t1−t0x=\frac{s1-s0}{t1-t0}如果t1≠t2t1\ne原创 2016-08-14 17:47:22 · 377 阅读 · 0 评论 -
BZOJ 4443 [Scoi2015]小凸玩矩阵
二分+二分图匹配题目转化为求k个行列不相交的数,最小化最大值。二分,行列看成二分图,进行匹配即可。坑爹,第k大是从大的开始算的第k个。语文好差呀。。。#include<cstdio>#include<cstring>#define N 255using namespace std;namespace runzhe2000{ int n, m, k, a[N][N], last[N]原创 2017-01-25 21:19:59 · 421 阅读 · 0 评论 -
BZOJ 4556 [Tjoi2016&Heoi2016]字符串
后缀数组+可持久化线段树+二分啊啊啊智商好低,想了好久。一个直观的想法是在s[a…b]中找到和s[c…d]最接近的串,使得height最大。然而一个很烦的事情是s[a…b]存在一个右边界b,意味着我们需要min一个边界值。遇到这种min啊max啊的东西一般考虑强行分类讨论。于是二分一个答案mid,那能贡献mid答案的串开头一定位于s[a…b-mid+1]之中,那边界的条件就没了,这样就可以直接用he原创 2017-02-10 20:34:41 · 597 阅读 · 0 评论 -
CF 484E Sign on Fence
可持久化线段树+二分简要题意:给出l,r,w,在[l,r]中找连续的长度为w的一段,最大化这一段中的最小值。最大化最小值,想到二分,那么check就应当是判断[l,r]内是否存在一段由大于等于二分答案的数所组成的长度≥w的连续区间。如果已经明确了这些数在哪里,这种查询是可以用线段树维护的。再考虑每一次实际上都是应用大于等于二分答案的所有数,删去小于二分答案的所有数。因此只需按数值从大到小维护可持久化原创 2017-01-14 22:05:53 · 370 阅读 · 0 评论 -
BZOJ 2440 [中山市选2011]完全平方数
二分+莫比乌斯函数+容斥原理方便起见,我们描述完全平方数及其倍数为不合法数,其余为合法数。二分答案x,找小于x的合法数有多少即可。然而这并不好找,我们来找不合法数。一个合数的平方的倍数一定也能写成一个质数的平方的倍数,因此只考虑质数的平方。一个完全平方数i2i^2,它的贡献⌊xi2⌋\left \lfloor \frac{x}{i^2} \right \rfloor。然而这样算是会算重的,比如36=原创 2017-01-06 23:31:20 · 311 阅读 · 0 评论 -
BZOJ 4698 Sdoi2008 Sandy的卡片
二分+后缀数组先差分,然后找n个串的最长公共子串。 听说直接KMP O(n2m)O(n^2m) 可过,然而用后缀数组可以优化到 O(nmlogn)O(nmlogn) 做法是把所有串接起来,相邻两串之间用不同大数隔开,做SA。显然如果长度k能有公共子串,那么≤k肯定也可以。于是二分k,把所有连续的heigh值≥k的一段拎出来,看这一段是否包含了1~n的一些子串。有的话意味着存在这样的n个子串,否则不原创 2016-12-24 19:35:52 · 720 阅读 · 1 评论 -
UOJ 150 [NOIP2015]运输计划
二分+树链剖分+差分要求最远的值最小,于是我们可以考虑二分答案。对于每一个二分出来的lim,我们只需要判断所有路径(指运输计划里面所有的路径)中长度大于lim的所有路径是否存在一条公共边,使得最长路径减去它可以小于等于lim(如果最长的可以,那么短的也肯定可以)那么怎么求这条边?我刚开始的想法是树剖+线段树,对每一条超过lim的路径上的边的都记+1,然后暴力枚举边来找公共边。但是这样是O(nlog3原创 2016-10-06 14:47:27 · 726 阅读 · 0 评论 -
BZOJ 1857 [Scoi2010]传送带
三分。三分AB上的点,再三分CD上的点即可(目测但是我太弱不会证,以后会证了再补证明过程)。要注意线段退化成点的情况,所以最好不要一边三分一边统计答案(在这里被坑QAQ)#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const double EPS=1e-3;double ax,ay,bx,by,原创 2016-08-20 17:14:53 · 343 阅读 · 0 评论 -
UOJ 49 [UR #3]铀仓库
二分官方题解首先那两个重要结论是不难发现的。接着我们就会考虑枚举每一个放箱子的位置,然后二分范围,再二分具体到哪一个箱子位置。这就是算法二,应该是没什么办法优化,注定要TLE的。。。我们考虑把用一定时间取尽量多的箱子变为取一定的箱子用最少的时间,这样可以二分答案了。注意到一个重要性质,如果确定要取箱子的数量,那么取箱子的x坐标区间是随s从1到n而单调的,于是套上双指针扫描即可- -计算的时候比较麻烦原创 2016-10-16 14:44:12 · 571 阅读 · 0 评论 -
BZOJ 1532 [POI2005]Kos-Dicing
二分+最大流二分答案s->所有人,容量为二分的答案,表示允许赢的次数 所有人->分别参与的所有比赛,容量为1,表示赢这局 所有比赛->t,容量1,表示这局已经做完了如何有解,那么一定能满流#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define N 10010#define S 2*N-1#d原创 2016-09-29 19:38:18 · 345 阅读 · 0 评论 -
BZOJ 4552 [Tjoi2016&Heoi2016]排序
二分+线段树本蒟蒻完全想不到二分啊。。。二分答案x。设小于等于x的值为0,大于x的值为1。排序的时候我们只关心x是否会出现在P位置上,而x的位置只和区间内小于它的数和大于它的数有关,所以不关心其他的值具体是多少,直接线段树维护赋值查询即可。#include<cstdio>#define N 100005using namespace std;struct opt{ int l, r,原创 2016-10-15 15:16:58 · 337 阅读 · 0 评论 -
BZOJ 4590 [Shoi2015]自动刷题机
二分。单调性?显然的嘛。。。#include<cstdio>#include<algorithm>using namespace std;int a[100005], n, k;int check(long long lim){ long long now=0, cnt=0; for(int i = 1; i <= n && cnt <= k; i++) {原创 2016-09-03 14:58:50 · 300 阅读 · 1 评论 -
BZOJ 1052 [HAOI2007]覆盖问题
二分+暴力判断。这题的思路很巧啊- -,必须去想最小矩形覆盖后的一些性质。发现用k(1≤k≤3)个正方形,覆盖平面上所有点,要求边与坐标轴平行,那么如果把所有点用一个最小的矩形(边也与坐标轴平行)圈起来,一定有至少一个正方形的一个顶点和矩形的一个顶点重合。证明就是假设没有这种情况,则肯定有矩形的四条边都和三个正方形的某条边重合,因为正方形只有三个,边有四条,不成立,就算是一些特殊情况想一想也可以知道原创 2016-08-23 18:13:08 · 490 阅读 · 0 评论 -
BZOJ 1189 [HNOI2007]紧急疏散evacuate
二分+最大流。首先可以发现如果t时间可以全部撤离,那么所有大于t的时间都可以撤离,于是考虑二分。又发现其实一个人往一个门走,走的肯定是最短路,于是可以计算出每个人到每个门的最短路。每一个人看作一个流量,由源点向每个人连容量为1的边。将每个门拆点表示每个时间出去的人(对于一个门C可以拆成编号为C+1,C+2,C+3,C+4……都向汇点连容量1的边),最多拆400个。每个人向每个门的【C+最短路距离】点原创 2016-08-23 12:38:52 · 379 阅读 · 0 评论 -
UOJ 133 [UR #9]电路手动分析
二分。刚开始做这题的时候,只是脑补出了这种做法,直觉告诉我它应该是对的,但并不会证明。 抱着试试看的心态打了一发,居然A了……题解:http://vfleaking.blog.uoj.ac/blog/694#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int main(){ long l原创 2016-08-30 22:10:53 · 444 阅读 · 0 评论 -
POJ 2318 TOYS
二分。添加一个编号为0的直线,为格子的左边框。二分,叉积判断离点最近的左边第一条直线编号即可。早上脑子有点不清楚,犯了一些奇怪的错误,狂WA不止。。。#include<cstdio>#include<cstring>double x1[5005], x2[5005], X1, Y1, X2, Y2;int cnt[5005], n, m;bool cross(double x, double原创 2016-08-18 13:07:58 · 252 阅读 · 0 评论 -
LOJ 6100 「2017 山东二轮集训 Day1」第一题
可持久化线段树+二分注意到如果[l,r]不降,[l,r-1]就肯定也不降,因此如果能对于每一个位置l,找到最远的r满足不降。这样套上主席树问题就搞定了。会降当且仅当此时异或上的a[i]的最高位恰好把当前的这一位从1变成0。因此记f[i][j][0/1]f[i][j][0/1]表示从a[1]开始异或到a[i],以j为最高位的时候,j从1变成0(或0变成1)有多少次。这样二分以后每一位都判一下即可。O(原创 2017-06-25 15:04:56 · 1204 阅读 · 0 评论