摘要:
可并堆 对于一段递减的序列我们可以取中位数作为b 那么我们可以把a分成几段递减的序列,每段都取中位数,并且中位数递增 那么维护一个单调栈,每次新加入元素,如果当前段的中位数比之前小就吃掉之前的 中位数用可并堆维护,维护前n/2大的数就行了 #include <cstdio> #include <cs 阅读全文
摘要:
组合数学 我好菜啊 想到dp去了。。。 事实上对于固定长度的数列,我们只用考虑选了哪些数就行了,所以这个就是$C(n+m-1,m-1)$ 也就是$n$个数,划分成$m$段且允许空的方案数 然后变成$\sum_{i=1}^{n}{C(i+m-1,m-1)}$ 经过popoqqq的推导方法 我们得出最终 阅读全文
摘要:
最短路 很早以前做的了 数据范围太大,不能直接算 mn=min(a[i]) 算出d[i]表示sum%mn=i最小能构成的数,这个用最短路就行了,然后计算d[i],d[i]+mn的个数统计答案 #include<bits/stdc++.h> using namespace std; const int 阅读全文
摘要:
高斯消元+概率dp 我好纸张 设dp[i]表示i到n异或和为1的概率,那么暴力高斯消元就行了,注意方程中n那一行要清零 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace 阅读全文
摘要:
lct+SAM bzoj4516+bzoj2555 这道题唯一的用处就是教会了我真正的广义SAM dfs时保留当前节点在后缀自动机中的位置,每个点接着父亲建 lct动态维护right集合大小,用lct维护子树就行了 #include <cstdio> #include <cstring> #incl 阅读全文
摘要:
AC自动机+矩阵乘法 套路$dp$,也就是从$root$开始走n步不经过危险节点 这不就是经典的倍增$floyd$吗,trie图是有向图 AC自动机真是个奇怪的东西,不能识别的子串都属于根节点 #include <cstdio> #include <cstring> #include <algori 阅读全文
摘要:
1444: [Jsoi2009]有趣的游戏 Description Input 注意 是0<=P 注意 是0<=P Output Sample Input Sample Output HINT 30%的数据保证, n ≤ 2. 50%的数据保证, n ≤ 5. 100%的数据保证, n , l, m 阅读全文
摘要:
$dp$ 凉凉.jpg 看到题就想决策单调性,想了一个多小时也没想出来,排名$200+$,$gg$ 事实上,我们只可能每$c$个或每一个分一段,假设我们分了一段长为$c$,如果添加一个新元素,如果新的比老的大,没影响,如果小,那么亏损,所以不如不加 #include <cstdio> #includ 阅读全文
摘要:
点分治 跟路径有关的立马想到了点分治 自然我们需要统计每条路径的答案,根据点分治的过程,考虑每条路径,我们希望当前路径上的点作为最小值 那么我们用树状数组保存之前每个最小值对应的最长长度,跑两遍即可 #include<bits/stdc++.h> using namespace std; const 阅读全文
摘要:
dfs 跟上道题很像有木有 同样地,我们暴力枚举约数 根据约数和公式,得出$S=\prod_{i=1}^{n}{(1+p+p^{2}+...+p^{a_{i}})}$ 所以每次我们暴力枚举是哪个约数,次数是多少,然后爆搜 如果剩下的约数和$S-1$是质数,那么说明约数只剩下一个大质数,直接统计答案结 阅读全文