Processing math: 1%

11 2015 档案

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

点击右上角即可分享
微信分享提示