![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分法
Love_xyh
这个作者很懒,什么都没留下…
展开
-
[POI2013]LUK-Triumphal arch
二分枚举答案后,做一个可行性dp来检验。#include <bits/stdc++.h>using namespace std;const int N=3e5+5;int n,u,v,l,r,mid,ans;int f[N];int cnt,head[N];struct edge{int next,to;}e[N<<1];inline void add(int u,int v){ cnt++; e[cnt].next=head[u]; e[cnt].to=v原创 2020-09-21 20:20:49 · 99 阅读 · 0 评论 -
[AHOI2013]差异
两个后缀i,j的lcp,其实就是:min(height[k]) ,i+1<=k<=j。所以这一部分的总和就是:height数组[2,n]内,每一区间的最小值之和。考虑用二分+ST表来求和。暴露了菜鸡不会写单调栈的事实…#include <bits/stdc++.h>#define int long longusing namespace std;const int N=5e5+5;int n,m,ans;int sum[N],rk[N],rk2[N],tp[N],s原创 2020-09-18 20:20:10 · 121 阅读 · 0 评论 -
UVA1146 Now or later
二分枚举答案,2-SAT检验是否可行。#include <bits/stdc++.h>using namespace std;const int N=2e3+5;int n,l,r,mid,ans,tot,a[N*2];struct number{int x,y;}num[N];int now,top,col,dfn[N*2],low[N*2],sta[N*2],color[N*2];int cnt,head[N*2];struct edge{int next,to;}e[N*N原创 2020-09-14 11:35:44 · 117 阅读 · 0 评论 -
CF1399E2 Weights Division (hard version)
与E1的不同在于对不同的边进行操作的花费数,有1和2两种。如果按照E1的类似方法做,貌似挺麻烦的,要用好几个堆来维护。先来考虑一下最后的答案是怎么产生的。很明显,是对操作一次花费为1的边进行了a次操作,对操作一次花费为2的边进行了b次操作。而a和b我们都不知道。不过可以肯定的是这a次一定是要对每次操作减去的贡献最多的边进行,b次也是如此。然后我们可以想到,把进行一次操作花费为1的边和花费为2的边分成两部分。我们枚举一次花费为1的边要操作几次,然后对于一次操作花费为2的边操作几次,二分得到答案。一眼看原创 2020-09-06 18:08:07 · 190 阅读 · 0 评论 -
洛谷 P1401 城市
Solution1:可由题意得一定存在T条路径,所以我们寻找T遍路径。对于每一次的路径寻找,二分答案此次的最长路段长,若满足条件则标记路径。(对于标记的路径,以后则不能使用)由此,我们可得到,答案即为第T次寻找路径的最长路段长。时间复杂度:O(T (n+m)logm),且常数较大。洛谷TLE 7#include <bits/stdc++.h>using namespace std;const int N=205,M=4e4+5;int n,m,t,u,v,w,tot,l,r,mid原创 2020-09-01 23:27:15 · 222 阅读 · 0 评论 -
[COCI2006-2007#1] Debug
我们先处理出两个哈希矩阵,分别代表初始矩阵,转180°后的矩阵。在统计答案时,枚举每个中心点,二分正方形的长度的一半,利用之前处理好的二维哈希值进行O(1)判断。(注意,正方形长度需要分奇偶讨论)时间复杂度:O(n^2 log n)#include <bits/stdc++.h>#define int unsigned long longusing namespace std;const int N=305;const int base1=131,base2=83;int n,m,原创 2020-08-20 12:57:41 · 157 阅读 · 0 评论 -
[ZJOI2009]对称的正方形
二维哈希模板题我们可以处理出三个哈希矩阵,分别代表初始矩阵,左右相反矩阵,上下相反矩阵,那么在统计答案时,只需要枚举每个中心点,二分正方形长度,利用之前处理好的二维哈希值O(1)判断。(注意,正方形长度需要分奇偶讨论)在处理二维哈希值时,我们先将每行单独做一次哈希,然后将一行的哈希值,当做初始值,再做一次列的哈希即可。在这个处理过程中,和二维前缀和有点相似,但必须分两次处理,分阶处理哈希值。#include <bits/stdc++.h>#define int unsigned lon原创 2020-08-16 10:40:51 · 228 阅读 · 0 评论 -
洛谷 P3118 [USACO15JAN]电影移动Moovie Mooving
状压+卡常状态和转移应该算是挺简单的,在转移过程中二分枚举一下就可以了,不过这个复杂度貌似有点慌:(2^n*n *log2( c ))/2(除以2,是因为当新枚举的那个i不在状态p中才进行转移),再加一个max,和几个位运算,加减运算,感觉会超时,事实证明,确实超时了。可能是我不太会卡常的缘故,这里给一个卡过去的别的人博客。洛谷AC下面来考虑下,不卡常的做法。很多dp中,n^3 都可以优化...原创 2019-11-11 00:18:06 · 213 阅读 · 0 评论 -
BZOJ 4698: Sdoi2008 Sandy的卡片
一直在想要不要把这篇题解删掉是上面那题的加强版,数据范围变大了,题目要求也稍微改动了一下。其实我们只要把原数组变成一个差量数组,同时在哈希的时候,避免负数就好了。时间复杂度:O(log2(m) nm log2(nm))#include <bits/stdc++.h>#define int unsigned long longusing namespace std;cons...原创 2020-03-18 15:58:49 · 96 阅读 · 0 评论 -
BZOJ 2946: [Poi2000]公共串
这里选择的是自然溢出hash。很明显,答案是具有单调性的,所以可以二分枚举答案。一篇很好的题解#include <bits/stdc++.h>#define int unsigned long longusing namespace std;const int N=2e3+5,base=131;int n,l,r,mid,ans;int len[6],hash[6][N...原创 2020-03-18 14:58:49 · 115 阅读 · 0 评论 -
BZOJ 1189: [HNOI2007]紧急疏散evacuate
远古时期的HNOI,这题感觉内存开小了吧,虽然数据也不是满的。如果是满的数据,128MB根本不够啊。20 20.DDDDDDDDDDDDDDDDDD.D..........D.......DD.......D..........DD..................DD.....D...D........DD........D....D....DD.............D.....原创 2020-02-21 20:35:00 · 183 阅读 · 0 评论 -
POJ 3685 Matrix
简单的二分套二分的题,分析一下单调性即可。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <string>#includ...原创 2020-01-14 22:53:16 · 119 阅读 · 0 评论