摘要: kmp复健,答案是n next[n] cpp include include using namespace std; const int N=1000005; int n,ne[N]; char s[N]; int main() { scanf("%d%s",&n,s+1); int j=0; f 阅读全文
posted @ 2018-09-07 22:03 lokiii 阅读(152) 评论(0) 推荐(0)
摘要: 有点神,按照1444的做法肯定会挂 注意到它的概率是相同的,所以可以简化状态 详见http://www.cnblogs.com/candy99/p/6701221.html https://www.cnblogs.com/liu runda/p/6919077.html 总之就是靠在kmp中的ne数 阅读全文
posted @ 2018-09-07 20:25 lokiii 阅读(152) 评论(0) 推荐(0)
摘要: 本来打算把每个颜色剩下的压起来存map来记忆化,写一半发现自己zz了 考虑当前都能涂x次的油漆本质是一样的。 直接存五个变量分别是剩下12345个格子的油漆数,然后直接开数组把这个和步数存起来,记忆化dfs即可 cpp include include using namespace std; con 阅读全文
posted @ 2018-09-07 17:43 lokiii 阅读(157) 评论(0) 推荐(0)
摘要: 二维哈希+二分 说是二维,其实就是先把列hash了,然后再用列的hash值hash行,这样可以O(n)的计算一个正方形的hash值,然后二分边长,枚举左上角点的坐标然后hash判断即可 只要base选的妙(闭眼随便敲一个数),单模数unsigned long long自然溢出也能过 阅读全文
posted @ 2018-09-07 17:14 lokiii 阅读(120) 评论(0) 推荐(0)
摘要: 矩阵乘法一般不满足交换律!!所以快速幂里需要注意乘的顺序!! 其实不难,设f[i]为i的答案,那么f[i]=(f[i 1] w[i]+i)%mod,w[i]是1e(i的位数),这个很容易写成矩阵的形式,然后按每一位分别矩阵快速幂即可 矩阵: f[i 1] w[i] 1 1 f[i] i 1 0 1 阅读全文
posted @ 2018-09-07 16:51 lokiii 阅读(112) 评论(0) 推荐(0)
摘要: bzoj上是一个森林啊……? dp还是太弱了 设f[i][j][k]为到点i,合成j个i并且花费k金币能获得的最大力量值,a[i]为数量上限,b[i]为价格,p[i]为装备力量值 其实这个状态设计出来就好做了,树上背包随便转移一下就行了 因为是森林,所以最后统计答案的时候也要再做一遍背包 cpp i 阅读全文
posted @ 2018-09-07 10:50 lokiii 阅读(251) 评论(0) 推荐(0)
摘要: 离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[i]位置 (因为这里已经++过了),这样区间查询的时候如果右端点超过ne[ne[i]]就能对答案有贡 阅读全文
posted @ 2018-09-07 09:21 lokiii 阅读(87) 评论(0) 推荐(0)
摘要: https://blog.sengxian.com/solutions/bzoj 1444 orz 一直是我想错了,建出AC自动机之后,实际上这个定义是设f[i]为经过i节点的 期望次数 ,因为单词末尾节点走到意味着游戏结束,所以经过单词末尾节点的概率就是经过单词末尾节点的期望次数。为什么是期望呢, 阅读全文
posted @ 2018-09-07 08:20 lokiii 阅读(191) 评论(0) 推荐(0)