同学,你听说过DQS吗?

这是蒟蒻,勾搭神犇.

这是蒟蒻,勾搭神犇。

2016-01-05 06:57:50

阅读数:1220

评论数:20

bzoj 1031 字符加密 后缀数组

把整个前n-1个字符复制到字符串末尾,求个后缀数组搞就可以。#include<cstdio> #include<cstring> #include<iostream> #define maxn 200010 using namespace std; char s...

2017-04-25 16:19:13

阅读数:258

评论数:1

bzoj 3944 Sum 杜教筛

我不太会用数学公式,但还是尽量写一写。其中sigma为求和,除法默认下取整。 令g(n)=sigma( d|n ) f(d); 令F(n)为f(n)的前缀和,G(n)为 g(n)的前缀和,要求F(n)。 G(n)=sigma(i=1~n) sigma( j|i ) f(j) ; G(n)=...

2017-04-25 16:14:27

阅读数:308

评论数:0

bzoj 4600 硬币游戏 博弈论

反硬币操作与c无关,只与2和3的指数有关。设sg[i][j]为2和3的指数分别为i和j时,且前面的硬币都不可翻时的sg值。然后就可以枚举p,q,对于每一个p,q,它的sg值为 sg[i-k*q][j]的异或和以及sg[i][j-k*q]的异或和,求mex。#include<cstdio>...

2017-04-25 15:54:29

阅读数:346

评论数:0

bzoj 1982 Moving Pebbles 博弈论

这道题不好想,可以先想先手必败的情况,一个比较显然的情况是石子个数成对出现时先手必败,因为先手怎样做后手可以完全模仿去做。然后还有没有其他情况呢,没有。其他情况把成对的抵消掉之后,我们可以将最大的补到其他的上面,还是可以凑成上述情况。#include<cstdio> #include&...

2017-04-25 15:47:15

阅读数:233

评论数:0

bzoj 1188 分裂游戏 博弈论

同一堆里的每个豆子是相互独立的,sg[i]表示第i堆里一个豆子的sg值。 sg[i]=mex( sg[j]^sg[k] ) ;#include<cstdio> #include<cstring> #include<iostream> using namespa...

2017-04-25 15:37:12

阅读数:231

评论数:0

bzoj 1299 巧克力棒 博弈论

不考虑从盒子中拿出这一操作,则剩下的部分就是一个Nim游戏。所以先手第一次只要拿到异或和为零的巧克力棒就必胜。因为若对手选择吃巧克力棒,则是必败局面。若选择拿出巧克力,则新的异或和一定不为零,因为如果一组巧克力异或和为零,则先手可以第一次的时候拿出来。 直接dfs就可以。#include<...

2017-04-25 15:30:54

阅读数:242

评论数:0

bzoj 2179 FFT快速傅里叶

真 · 背板子。好像是用到了分治思想。#include<cmath> #include<cstdio> #include<cstring> #include<complex> #include<iostream> using namesp...

2017-04-25 12:31:33

阅读数:259

评论数:0

bzoj 1874 取石子游戏 博弈论

博弈论基础题,第一次写博弈论题目。 每堆石子的游戏是相互独立的,一个局面是由这n堆石子n个子游戏构成。 对于每堆石子,用sg[i]表示有i个石子的sg值,sg值由它的后继状态推过来:sg[i]=mex(sg[i-b[j]]); 最后的答案即为 : sg[ a[i] ] 的异或和;若ans=...

2017-04-24 22:06:55

阅读数:302

评论数:0

bzoj 3295 动态逆序对 CDQ分治

每删除一个数对答案的影响是 前面比他大的数的个数+后面比他小的数的个数。问题变成了插入一个数并求出前面有多少数比他大(后面小的数可以用同样方法求)。 首先这可以用一个二维数据结构做。 CDQ分治的强大之处在于它能够压掉一维。它的主要思想是把操作分为两部分,计算前半部分修改对后半部分询问影响,然...

2017-04-21 11:53:58

阅读数:211

评论数:0

bzoj 4698 Sandy的卡片 后缀数组

可以把原序列转化为差分序列,题意就变成了求这n个差分序列的最长公共子串。然后就可以连成一串,用后缀数组做。二分一个答案,询问是否有连续n个后缀LCP>=mid而且首位所属的串不相同。#include<cstdio> #include<cstring> #include...

2017-04-19 12:07:40

阅读数:220

评论数:0

bzoj 2693 jzptab 莫比乌斯反演

首先,积性函数的约数和也是积性函数。 然后,比较尴尬的是我不太会用数学公式。 所以,大家就不要浪费时间看我写的博客。#include<cmath> #include<cstdio> #include<iostream> #define LL long lon...

2017-04-17 12:43:16

阅读数:221

评论数:0

bzoj 2440 完全平方数 莫比乌斯函数

二分答案,求1~n里有多少个非完全平方数。 ans=n - (n/2^2) - (n/3^2) - (n/5^2) - (n/7^2)…… 然后再加上出现两次的,减去出现三次的…… 这是莫比乌斯函数。#include<cmath> #include<cstdio>...

2017-04-17 12:36:45

阅读数:215

评论数:0

bzoj 3940 & 3942 KMP || AC自动机

3942题解: 定义f[i] 为S串以第i位结尾的后缀,最长可以是T串多长的前缀,这一个可以用KMP匹配。 可以用一个first数组记录i字符前一个未被匹配的位置是哪一个,当f[i]=len(T)时,就可以将最末尾的len(T)个字符匹配了。 3940只需要把KMP换为AC自动机就可以。39...

2017-04-15 07:15:27

阅读数:204

评论数:0

bzoj 2553 禁忌 AC自动机+期望DP

先考虑一个串A如何划分价值最大,只需要按照所有T串在A中匹配的右端点排个序贪心去选,也就是希望我在A中匹配i个禁忌串,最靠后的右端点应该尽量靠前。 在AC自动机上对应为:只要走到一个禁忌串的终止节点,就将它划分出一段,(这里的终止节点包括那些顺着fail指针能走到终止节点的点)。 可以设dp[...

2017-04-15 06:57:08

阅读数:389

评论数:0

bzoj 1212 L语言 Trie+DP

f[ i ] 为串前i位能否被理解,单词长不超过10,所以f[ i ]可以暴力转移……#include<cstdio> #include<cstring> #include<iostream> #define maxn 205 using namespace s...

2017-04-15 06:36:23

阅读数:314

评论数:0

bzoj 2938 病毒 AC自动机

在补全之后的AC自动机上顺着child找环而不经过终止节点,如果存在环,则说明我们可以顺着这条路径构造无限长的字符串。#include<queue> #include<cstdio> #include<cstring> #include<iostream&...

2017-04-13 18:42:01

阅读数:397

评论数:0

bzoj 1030 文本生成器 AC自动机+DP

答案=方案总数-不合法总数; 设AC自动机上非法节点为终止节点(或fail指针指向终止节点的点) dp[ i ] [ j ]为当前在AC自动机上跑了 i 步 ,跑到 j 节点的方案数,其中过程不经过非法节点。 不合法方案数=sigma(dp[ m ] [ i ])其中 i 不是为合法节点。#...

2017-04-13 18:36:04

阅读数:164

评论数:0

bzoj 2434 阿狸的打字机 AC自动机+fail树

询问x串在y串中出现次数,就是有多少y串的节点能顺着fail边跑到x的终止节点。所以建出fail树,求end[x] 为根的子树中有多少y的节点。 这个可以离线询问,用树状数组维护。#include<queue> #include<vector> #include<c...

2017-04-13 17:31:46

阅读数:162

评论数:0

bzoj 4402 Claris的剑 组合数学

#include<cstdio> #include<iostream> #define LL long long #define maxn 4000005 using namespace std; int N=4000000; LL mod=1e9+7; LL fac[m...

2017-04-01 15:05:29

阅读数:316

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭