11 2015 档案
摘要:假设当前询问点为$(A,B)$,那么它在一个以$(x,y)$为圆心的圆里需要满足:$(x-A)^2+(y-B)^2\leq x^2+y^2$$2Ax+2By\geq A^2+B^2$等价于询问所有圆心与$(2A,2B)$的点积的最小值是否小于$A^2+B^2$。考虑将修改操作二进制分组,分成$O(\...
阅读全文
摘要:首先特判全部都是A或者全部都是B或者$n=1$的情况。然后把矩阵四周都填充上A,枚举一个块,分以下情况讨论:1.在它四周选两个块扩展,此时平方暴力枚举即可。2.在它四周选定一个方向扩展两步。3.选择一个角落,斜着扩展一步,再扩展另一步。时间复杂度$O(n^2)$。#include#define re...
阅读全文
摘要:将石子从小到大排序,然后DP。设$f[i][j][k]$表示考虑了前$i$堆的石子,当前扔掉的堆数模$d$为$j$,没有扔掉的石子的异或和为$k$的方案数。因为石子排过序,所以转移的复杂度为$O(md)$。对于空间的问题,注意到$f[i][j][k]$和$f[i][j][k\ xor\ a[i]]$...
阅读全文
摘要:设$f[x][j]$表示$x$点不放无线,它的儿子里放了$j$个无线,且对$x$的父亲不作要求时的最小代价。$g[x][j]$表示$x$点不放无线,要求$x$的父亲至少放$j$个无线时的最小代价。$h[x][j]$表示$x$点放了$j$个无线时的最小代价。然后从底向上树形DP即可,时间复杂度$O(n...
阅读全文
摘要:只考虑第一问,将珠子按照价值从小到大排序,设排序后第$i$小的为$b[i]$,定义二元组$(x,y)$表示当前珠子的总价值为$x$,用的价值最大的珠子为$y$,用一个小根堆来维护所有状态。一开始往堆中加入$(b[1],1)$状态,然后每次取出堆顶元素$(x,y)$,可以扩展出$(x+b[y+1],y...
阅读全文
摘要:设$f[x]$为$x$子树里的子游戏的sg值,$h[x]$为$x$所有儿子节点$f[x]$的异或和,则:$f[x]=mex(y到x路径上所有点的h的异或和\ xor\ y到x路径上所有点的f的异或和)$,$y$是$x$子树中的一个白点。考虑一个白点对其祖先的影响,可以发现每往上走一步,一个子树里的贡...
阅读全文
摘要:可以发现,每个特殊点可以贡献的部分在树上是一条链。设三元组(v,x,y)表示路径长度,需要更新的端点,与当前点的lca为y。对于每个节点x,通过两遍树形DP可以求出:d[x]:x到x子树内的某个特殊点的最优解。u[x]:x到x子树外的某个特殊点的最优解。pre[x]:x以及x之前的兄弟的d[]的最优...
阅读全文
摘要:单路径最大和问题,设f[i][j][S]表示到达(i,j),轮廓线状态为S的最优解。S用4进制m+1位数表示,0表示无插头,1表示左括号,2表示右括号,3表示独立插头。在DP之前先进行一次预处理,剔除无效状态,并预处理出与每个括号匹配的另一个括号的位置,有效状态只有8000个左右。然后分类讨论进行转...
阅读全文
摘要:求出最大生成树,则两点间的最大容量为树上两点间的边权的最小值。设$lim[i]$表示第$i$个订单的城市允许携带的黄金上限,则$lim[i]=\min(lim[i+1],a[i]和a[i+1]点间最大容量)+\max(0,-b[a[i]])$然后依次模拟即可,时间复杂度$O(m\log n)$。#i...
阅读全文
摘要:建立AC自动机,并求出转移矩阵。再用$\sum E(终止节点)=1$去替换第一个方程,高斯消元即可。时间复杂度$O(n^3l^3)$。注意精度问题,要特判0.00的情况。#include#include#include#define N 110using namespace std;int n,l,...
阅读全文
摘要:树的点分治,在分治的时候将所有点到根的距离依次放入一个数组q中。对于一棵子树里的点,合法的路径一定是q[L]..q[R]的某个数加上自己到重心的距离。定义五元组(v,l,m,r,w),表示当前路径长度为v,在[l,r]里选出最大值m,并加上w。用大根堆维护这些五元组,每次取出v最大的元素,并扩展出[...
阅读全文
摘要:考虑分块,每块维护两个标记$ts,td$。那么对于块中一个位置$i$,它的实际值为$i\times td+ts+v_i$。修改的时候,对于整块,直接打标记,对于零散的暴力修改,然后重构凸壳,时间复杂度$O(\sqrt{n})$。查询的时候在凸壳上二分即可,时间复杂度$O(\sqrt{n}\log n...
阅读全文
摘要:对于一棵无根树,它的重心个数不超过2。 枚举每个重心,以重心为根求出这棵有根树的最小表示,然后取字典序最大的即可。 对于有根树的最小表示,可以看成括号序列,每次把子树的括号序列按字典序排序后依次串连起来即可。 #include<cstdio> #include<string> #include<al
阅读全文
摘要:对所有询问串建立AC自动机。然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break,这样每个点最多只会被标记一次。时间复杂度$O(N+100M)$。#include#includeconst int N=10000003...
阅读全文
摘要:将每个点看成二维坐标点$(i,a_i)$,那么每次操作的范围都是一个矩形。于是建立KD-Tree,通过打标记支持操作即可。时间复杂度$O(m\sqrt{n})$。#include#includeconst int N=50010,P=536870912;int n,m,i,root,cmp_d,an...
阅读全文
摘要:首先通过差分约束系统建图,用Floyed算法求出任意两个砝码差值的上下界。然后暴力枚举放在右边的砝码C,D,通过与A,B差值的上下界分类讨论统计方案。时间复杂度$O(N^3)$。#include#define rep(i) for(i=0;ib)a=b;}inline void umax(int&a...
阅读全文
摘要:设出$x,y,z$三个未知量分别表示三种单位的战斗力。那么各种不等式都可以表示成$ax+by+cz\geq 0$的形式。注意到$z>0$,那么两边都除以$z$得到$ax+by+c\geq 0$。然后半平面交求出所有顶点后,对于每次询问将所有顶点带入求值即可。#include#include#incl...
阅读全文
摘要:设$f[i]$表示$i$点按下开关后会影响到的点的集合,用二进制表示。不妨设$n$为偶数,令$m=\frac{n}{2}$,对于前一半暴力$2^m$搜索所有方案,用map维护每种集合的最小代价。对于后一半暴力$2^m$搜索所有方案,在map中查询补集。时间复杂度$O(n2^{\frac{n}{2}}...
阅读全文
摘要:建立Trie,那么成为答案的串必须满足其终止节点到根路径上没有其它点。对于Trie上每个节点维护一个bitset,表示哪些字符必须在哪些字符之前。每到达一个可能成为答案的终止节点,对图进行拓扑排序进行判定。时间复杂度$O(26^2N+26|S|)$。#include#include#define r...
阅读全文

浙公网安备 33010602011771号