摘要: 貌似不用做前缀和也能过? 阅读全文
posted @ 2018-09-25 21:54 Ressed 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 有两种情况:一个点到它的父亲的父亲(要算两次)、一个点的子节点之间互相到达 阅读全文
posted @ 2018-09-25 21:52 Ressed 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #define pa pair 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=220; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();... 阅读全文
posted @ 2018-09-25 21:50 Ressed 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]为到达(i,j)这个位置的最小操作数 就有$f[i][j]=min\{f[i-1][j+Y[i-1]],f[i-1][j-X[i-1]*k]+k\}$ 然后考虑优化一下转移: 对于一系列模x[i-1]相同的高度,它们都可以转移到模x[i-1]相同的高度、而且在它们上边的点,所以只要从 阅读全文
posted @ 2018-09-25 21:49 Ressed 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 先二分出一个x,我们要算使最近的跳跃距离>=x的最少移除数量是否<=M就可以了 然后就别dp了...贪心就完事了...我肯定能不移就不移比较好... 阅读全文
posted @ 2018-09-25 21:42 Ressed 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j][k][b]表示在A串第i位、这是第j组、B串第k位、i号选不选(b=0/1) 那么就有$f[i][j][k][1]=(A[i]==B[k])*(f[i-1][j-1][k][0]+f[i-1][j][k-1][1]+f[i-1][j-1][k-1][1])$,$f[i][j][k] 阅读全文
posted @ 2018-09-25 21:40 Ressed 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 首先求出fail数组,如果没有不重叠的限制的话,我们可以在求fail的时候递推出个数cnt[i]=cnt[fail[i]]+1(这个cnt是算上自己本身==自己本身的) 然后如果是要求不重叠的话,就是相当于一直跳fail,直到找到了一个长度不超过一半的fail,然后num[i]就是它 但如果直接暴力 阅读全文
posted @ 2018-09-25 21:36 Ressed 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 我们先不会就二分一下答案,设它是x,我们要判断它能不能满足 为了满足这个答案,我们就要让原本路径长度大于x的所有路径都经过某条边,而且这条边还要大于等于最长的路径-x 于是运用树上差分的思想,对于所有长度>x的路径,给他的两端点处++,lca处--,这样统计树上每个点的子树的和,就是这个点与它父节点 阅读全文
posted @ 2018-09-25 21:29 Ressed 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 秦九韶算法:多项式$a_0+a_1x+a_2x^2+...+a_nx^n=a_0+x(a_1+x(a_2+...+(xa_n))..)$,这样对于一个x,可以在O(n)求出结果 为了避免高精度,我们同时模几个质数来判断每个的值是不是等于0,这样出锅的概率就非常小 然而这样做复杂度是O(nm),过不去 阅读全文
posted @ 2018-09-25 21:23 Ressed 阅读(185) 评论(0) 推荐(0) 编辑