09 2015 档案
摘要:对于第x个数, 下一轮它会到位置p.当xN/2, p = x*2%(N+1)所以p = x*2%(N+1)设一开始的位置为t, 那么t*2M%(N+1)=L, 只需把2M除过来, 即L乘上2M的乘法逆元即为答案.--------------------------------------------...
阅读全文
摘要:题意保证了是一个置换群.根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i,j,k) = dp(x,i-cntx,j,k)+dp(x,i,j-cntx,k)+dp(x,i,j,k...
阅读全文
摘要:弦图最小染色...先用MCS求出完美消除序列然后再暴力染色...-------------------------------------------------------------------------------------#includeusing namespace std;const...
阅读全文
摘要:dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满足题意且开头是下降的序列dp(i,j) = dp(i,j-1) + dp(i-1,i-j+1). 前一...
阅读全文
摘要:第一场BC...感觉还是多参加点比赛吧...第一题水题各种乱搞就可以过第二题依旧水题..记个前缀和就行了..虽说是2道水题..然而我T1提交时就过了20min, T2还RE了一发..第二次提交就已经48min了...然后rank就被甩了几条街..第三题感觉直接考虑每个区间的贡献应该可以..然后再减掉...
阅读全文
摘要:按题意用priority_queue模拟即可----------------------------------------------------------------------#includeusing namespace std;const int maxn = 1009;const in...
阅读全文
摘要:dp(i,j)表示1~i的全部排列中逆序对数为j的个数.从1~i-1的全部排列中加入i, 那么可以产生的逆序对数为0~i-1, 所以dp(i,j) = Σ dp(i-1,k) (j-i+1 ≤ k ≤ j) 用前缀和优化就可以做到O(N2)了-----------------------------...
阅读全文
摘要:S->每个奇数,每个偶数->T各连一条边, 容量为这个数字.然后不能同时选的两个数连容量为+oo的边. 总数-最大流即是答案.因为满足a2+b2=c2的a,b一定是一奇一偶或者两个偶数, 2偶不满足gcd=1, 所以两个数不能同时选一定是一奇一偶.--------------------------...
阅读全文
摘要:按A从小到大排序然后用栈解决.--------------------------------------------------------------------#includeusing namespace std;typedef long long ll;const int maxn = 5...
阅读全文
摘要:可并堆水题---------------------------------------------------------#includeusing namespace std;const int maxn = 1000009;struct Node { Node *l, *r, *ch; int...
阅读全文
摘要:简单的dp..dp(i,j) = max(dp(x,y))+cnt[i][j], (x,y)->(i,j)是合法路径.设f(i)= max(dp(x,y))(1≤x≤N,1≤y≤i), g(i,j) = max(dp(i, k))(1≤k≤j)那么dp(i,j) = max(f(j+delta), ...
阅读全文
摘要:没什么好说的...---------------------------------------------------------------------#include#include#includeusing namespace std;typedef long long ll;int MOD...
阅读全文
摘要:显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了--------------------------------------------------------------------------#include#include#includeusing nam...
阅读全文
摘要:sum为战斗力的前缀和dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤pusing namespace std;typedef long long ll;const int maxn = 1000009;int N, A, B, C, Q[...
阅读全文
摘要:做一次MST, 枚举不在最小生成树上的每一条边(u,v), 然后加上这条边, 删掉(u,v)上的最大边(或严格次大边), 更新答案.树链剖分然后ST维护最大值和严格次大值..倍增也是可以的...-----------------------------------------------------...
阅读全文
摘要:第i个填到第i+1个的期望得分显然是1/max(a[i],a[i+1]).根据期望的线性性, 我们只需将每个选项的期望值累加即可.---------------------------------------------------------------------------#includeus...
阅读全文
摘要:之前一直没调出来T^T...早上刷牙时无意中就想出错在哪里了...对全部单词建AC自动机, 然后在自动机上跑dp, dp(i, j)表示匹配到了第i个字符, 在自动机上的j结点的方案数, 然后枚举A~Z进行转移.--------------------------------------------...
阅读全文
摘要:数据范围是N:20w, K100w. 点分治, 我们只需考虑经过当前树根的方案. K最大只有100w, 直接开个数组CNT[x]表示与当前树根距离为x的最少边数, 然后就可以对根的子树依次dfs并更新CNT数组和答案. 复杂度是O(NlogN)----------------------------...
阅读全文
摘要:sa后求出height数组, 答案显然是∑RMQ(height[l],height[r])(1≤l#include#include#includeusing namespace std;typedef long long ll;#define b(i) (1 sta;void build() { ...
阅读全文
摘要:dp..dp(i, j)表示画两个点为i-j, i的最优答案. dp(i, j) = min{ dp(i-j, k) } + cost[i] (1≤k≤M-j)令f(i, j) = min{dp(i, j)}, 那么转移时间下降为O(1).然后滚动数组..这道题卡空间..时间复杂度O(NM)----...
阅读全文
摘要:刷刷水题...前缀和的前缀和...显然树状数组可以写...然而我不会, 只能写线段树了把改变成加, 然后线段树维护前缀和, 某点p加, 会影响前缀和pre(x)(p≤x≤n), 对[p, n]这段区间加即可, 然后query就求[1, p]的和即可--------------------------...
阅读全文
摘要:之前以为xor,or,and满足结合律...然后连样例都过不了早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了...滚去吃饭了..-----------------------------------------------------------...
阅读全文
摘要:先跑网络流, 然后在残余网络tarjan缩点.考虑一条边(u,v):当且仅当scc[u] != scc[v], (u,v)可能出现在最小割中...然而我并不会证明当且仅当scc[u] = scc[S] && scc[v] == scc[T], (u, v) 必定出现在最小割中. 这个很好脑补, 假如...
阅读全文
摘要:既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减dp(v) = min{ dp(p)+xv*yp+1 }假设dp(v)由i转移比由j转移优(i>j), 那么dp(i)+xv*yi+1 -xv然后就斜率优化, 单调队列维护一个...
阅读全文
摘要:dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来.差分答案, 对于0~x的答案, 从低位到高位进行讨论------------------------------------------------------------------------------#inclu...
阅读全文
摘要:dp(v) = min(dp(p)+cost(p,v))+C(v)设sum(v) = ∑pi(1≤i≤v), cnt(v) = ∑pi*xi(1≤i≤v), 则cost(p,v) = x(v)*(sum(v)-sum(p)) - (cnt(v)-cnt(p))假设dp(v)由dp(i)转移比dp(j...
阅读全文
摘要:dp..dp(x, t) 表示共x位, 第x位为t有多少个windy数.对答案差分, 我们只需统计1 ~ l-1和1 ~ r的windy数数量.考虑如何计算[1, n]的答案 : 从最高位到最低位依次计算, 假设n的最高位x的数为t, 那么dp(x, 0 ~ t-1)对答案都有贡献, 然后假设最高位...
阅读全文
摘要:莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢...-------------------------------------------------------------------------#includeusing namespace s...
阅读全文
摘要:暑假就这么过去了...这个暑假好像没学什么...刚放假就在刷题, 然后就学了点数论(欧拉函数, 莫比乌斯函数/反演)...然后八月集训也没弄什么..参加了几场比赛..写了写我不擅长的字符串(后缀数组, kmp), 哈希大法好!CF, BC的比赛都是没有部分分的..我又太弱了, 不太想参加..而且CF...
阅读全文
摘要:yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了---------------------------------------------------------------------------------#includeusing namespace...
阅读全文
摘要:水题, 求MST即可.--------------------------------------------------------------------------------#includeusing namespace std;#define sqr(x) ((x) * (x))const...
阅读全文
摘要:匈牙利算法..从1~10000依次找增广路, 找不到就停止, 输出答案.----------------------------------------------------------------------------#includeusing namespace std;const int ...
阅读全文
摘要:莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5)------------------------------------------------------------------------------...
阅读全文
摘要:字符串哈希. 暴力枚举每一位, 弄出哈希值, 排序统计. 时间复杂度O(L N logN)---------------------------------------------------------------------------------------#include#include#i...
阅读全文
摘要:∑lcm(i,n) = ∑ i*n/(i,n) = ∑d|n∑(x,n)=d x*n/d = ∑d|n∑(t,n/d)=1t*n = n∑d|nf(d). f(d)表示1~d中与d互质的数的和, 即f(d) = d*φ(d)/2(d>=2). 然后O(n)筛φ, 每次询问暴力算即可...最大是100...
阅读全文