上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 38 下一页
摘要: 对于一个连通块,取一个点进行dfs,得到一棵dfs搜索树,则这棵树的深度不超过10,且所有额外边都是前向边。对于每个点x,设S为三进制状态,S第i位表示根到x路径上深度为i的点的状态:0:选了1:没选,且没满足2:没选,且已满足设f[i][j]表示考虑根到x路径上深度为i的点时这些点的状态为j时的最... 阅读全文
posted @ 2015-10-05 02:52 Claris 阅读(892) 评论(0) 推荐(0)
摘要: 先不断将度数小于D的点都删去,再找到剩下的图里最大的连通块即可。#include#include#define N 200010int n,m,D,x,y,i,g[N],v[N='0')&&(c='0')&&(cans)for(ans=t,x=1;x1)std::sort(fin+1,fin+ans... 阅读全文
posted @ 2015-10-04 16:58 Claris 阅读(493) 评论(0) 推荐(0)
摘要: 斐波那契数列模$10^m$的循环节为$6\times10^m$,于是从低位到高位dfs即可。#include#include#define N 20typedef long long ll;typedef unsigned long long ull;int n,i,flag;char a[N];l... 阅读全文
posted @ 2015-10-04 16:57 Claris 阅读(825) 评论(0) 推荐(0)
摘要: 每个点的最优取值范围是一个区间,将叶子一层层剥去,得到一棵有根树,父亲的取值范围由儿子推得,时间复杂度$O(n\log n)$。#include#include#define N 500010int n,m,i,j,x,y,c,g[N],v[N='0')&&(c='0')&&(c0?x:-x;}in... 阅读全文
posted @ 2015-10-02 21:15 Claris 阅读(890) 评论(0) 推荐(0)
摘要: 第i轮,a[i%n]+=b[i%m]。枚举i,计算它变为0的次数,假设为t,那么有t=i+kn。对于所有的i和k,(i+kn)%m形成了若干个总长度为m的环。对于每个a[i],先在环中求出一轮最多可以减少多少,以及一轮的增量是多少,由此可以求出在几轮后变为0。再在前缀后缀分类讨论一下即可求出具体是在... 阅读全文
posted @ 2015-10-02 21:14 Claris 阅读(571) 评论(0) 推荐(0)
摘要: 首先在开头加上-inf,结尾加上inf,最后答案减2即可。设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么:f[i]=max(f[j]+min(s[i]-s[j],a[i]-a[j]-1))+1,其中j#includeusing std::sort;const int ... 阅读全文
posted @ 2015-10-01 20:50 Claris 阅读(609) 评论(0) 推荐(0)
摘要: 假设询问两点中d[x]#include#define N 200010using namespace std;int n,m,q,i,op,x,y,T,pos[N],bit[N],ans[N],cb,cc;int g[N],v[N],nxt[N],ed,f[N],size[N],son[N],top... 阅读全文
posted @ 2015-10-01 01:25 Claris 阅读(396) 评论(0) 推荐(0)
摘要: 注意到f(n)不会超过1459,于是暴力枚举f(n),检验n=k*f(n)是否合法即可。#includelong long k,a,b,t;int i,j,ans;int main(){ scanf("%lld%lld%lld",&k,&a,&b); for(i=1;i<=1459&&k<=b/... 阅读全文
posted @ 2015-09-30 19:25 Claris 阅读(302) 评论(0) 推荐(0)
摘要: 不管怎么修改,所有数字的排名都不会发生变化。将a[]从小到大排序之后,维护一棵线段树,在上面修改。对于收割操作,在线段树上二分,找到需要修改的后缀进行区间赋值即可。时间复杂度$O(m\log n)$。#include#include#define N 1050000typedef long long... 阅读全文
posted @ 2015-09-30 19:25 Claris 阅读(811) 评论(0) 推荐(0)
摘要: 线段树每个区间维护上下界以及要整体增加的标记即可,时间复杂度$O(m\log n)$。#include#define inf 1500000000int n,m,op,c,d,p;struct Node{int l,r,t;}T[1050000];inline void read(int&a){ ... 阅读全文
posted @ 2015-09-30 15:54 Claris 阅读(319) 评论(0) 推荐(0)
摘要: 假设分成如下三段:[1..i][i+1..j][j+1..n]考虑中间那一段,设f[i]为前i位组成的数模q的值,pow[i]为$10^i$模q的值,那么有:f[j]-f[i]*pow[j-i]=0f[j]*pow[i]=f[i]*pow[j]f[j]*inv(pow[j])=f[i]*inv(po... 阅读全文
posted @ 2015-09-30 15:53 Claris 阅读(416) 评论(0) 推荐(0)
摘要: 首先在串的末尾加上1000,然后进行归并,每次取字典序较小的那个后缀即可。用hash+二分支持查询lcp,时间复杂度$O(n\log n)$。#includetypedef long long ll;const int N=200010,P=31,D=1000173169;int n,m,i,j,k... 阅读全文
posted @ 2015-09-30 15:53 Claris 阅读(421) 评论(0) 推荐(0)
摘要: 建立线段树,S向每个叶子连边,容量1,费用0。孩子向父亲连边,容量inf,费用0。每个强盗向T连边,容量1,费用为c[i]。对应区间内的点向每个强盗,容量1,费用0。求最大费用流即可。#includeconst int inf=~0U>>2,N=15010,M=1000000;int n,i,A,B... 阅读全文
posted @ 2015-09-30 15:52 Claris 阅读(495) 评论(0) 推荐(0)
摘要: 设f[i][j]为a[1..i]与b[1..j]的LCS,g[i][j]为a[i..n]与b[j..m]的LCS。若C为0,则ans=f[n][m]。否则求出d[i]=a中从i开始往右匹配上c串的位置以及e[i]=b中从i开始往右匹配上c串的位置。则ans=max(f[i-1][j-1]+g[d[i... 阅读全文
posted @ 2015-09-30 15:51 Claris 阅读(379) 评论(0) 推荐(0)
摘要: 把时间看成第一维,编号看成第二维,则每个询问等价于询问某个矩形范围内与某个数异或的最大值。从高位到低位贪心,考虑离线分治,假设当前处理第k位,那么把所有点以及按这一位分成两类,分别扫描线+树状数组维护即可。时间复杂度$O(n\log^2n)$。#include#include#define N 20... 阅读全文
posted @ 2015-09-29 22:44 Claris 阅读(794) 评论(0) 推荐(0)
摘要: 首先将所有显然不在最优解中的外卖都删去,那么剩下的外卖价格越低,保质期也最短。考虑三分订外卖的次数,然后贪心求解,每次尽量平均的时候可以做到最优化。三分的时候,以存活天数为第一关键字,剩余钱数为第二关键字,就能使函数严格上凸,这样才可以保证三分的正确性。时间复杂度$O(n\log m)$。#incl... 阅读全文
posted @ 2015-09-29 01:31 Claris 阅读(286) 评论(0) 推荐(0)
摘要: 首先将所有高度乘上10,设f[i]为将前i本书放入书架的最小高度,则\[\begin{eqnarray*}f[i]&=&\min(f[j-1]+first(j,i)+second(j,i)+W-(s[i]-s[j-1]))\\ &=&\min(f[j-1]+first(j,i)+second(... 阅读全文
posted @ 2015-09-22 22:37 Claris 阅读(272) 评论(0) 推荐(0)
摘要: 对每个点维护一个bitset,记录哪些点可以攻击它。可以通过kd-tree+标记永久化实现。对于一个阵营,它在m轮之后防御系统全部完好的概率为$(1-\frac{攻击它的点数}{n})^m$。时间复杂度$O(n\sqrt{n}+\frac{nk}{32})$。#include#include#inc... 阅读全文
posted @ 2015-09-22 18:47 Claris 阅读(530) 评论(2) 推荐(0)
摘要: 最大值和最小值的问题是独立且相似的,考虑最大值:考虑离线,设ask(i,l,r)为以1到i为右端点时左端点在区间[l,r]内的区间最大值的和。从1到n枚举右端点,假设现在是i,那么可以通过单调栈求出最小的j使得[j,i]内a[i]是最大值。然后左端点在[j,i]区间内的所有区间最大值都应当变为a[i... 阅读全文
posted @ 2015-09-20 23:59 Claris 阅读(1625) 评论(0) 推荐(1)
摘要: 若x与y可能成为好*友,那么它们连出去的点除了x和y之外都相同。于是给每个点一个long long的随机权值,然后每个点的hash值为与其相连的点的权值的异或和,若两个点hash值相等,则可行。给每个点的hash值异或上自己本身的权值再求一次即可得到正确答案。时间复杂度$O(n\log n)$。#i... 阅读全文
posted @ 2015-09-20 22:07 Claris 阅读(513) 评论(0) 推荐(0)
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 38 下一页