【bzoj3160】【xsy1726】万径人踪灭】的更多相关文章

[BZOJ3160]万径人踪灭(FFT,Manacher) 题面 BZOJ 题解 很容易想到就是满足条件的子序列个数减去回文子串的个数吧... 至于满足条件的子序列 我们可以依次枚举对称轴 如果知道关于这个位置对称的位置的组数 就很容易算了(直接\(2^k-1\)) 而关于这个位置对称是什么东西? \(s[x-i]=s[x+i]\) 也就是说,如果两个位置关于\(x\)位置对称,那么 \((x-i)+(x+i)=2x\) 也就是两个位置的坐标的和等于\(2x\) 这个玩意不就像一个卷积卷积了?…
[BZOJ3160]万径人踪灭 Description Input Output Sample Input Sample Output HINT 题解:自己想出来1A,先撒花~(其实FFT部分挺裸的) 做这道题,第一思路很重要,显然看到这题的第一想法就是ans=总数-不合法(不要问我为什么显然).因为向这种用补集法的题一般都会给一些很奇葩的限制条件,但是一旦换个角度去想就很水了,好了不多说废话了. 显然,不合法的情况,也就是连续的回文区间的方案数,我们直接上Manacher就搞定了嘛!答案就是所…
http://www.lydsy.com/JudgeOnline/problem.php?id=3160 (题目链接) 题意 给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数. Solution 在膜拜了PoPoQQQ大爷的题解后,我觉得有必要自己写一发,感觉这道题倒还是可以理解的. 不连续的回文子序列个数感觉并不是特别好求,而不连续的回文子序列个数=回文子序列个数-连续回文子序列个数.后者很好办,就是${Manacher}$板子,考虑没有任何限制的回文子序列个数怎么求. 借用${…
..恩 打了四五遍 不会也背出来了.. BZOJ3160 [听说时限紧?转C++的优势么?] 上AC代码 fft /*Problem: 3160 User: cyz666 Language: C++ Result: Accepted Time:1992 ms Memory:18492 kb ****************************************************************/ #include <bits/stdc++.h> #define LL l…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3160 我是一个傻叉 微笑脸 #include<bits/stdc++.h> #define inf 1000000000 #define ll long long #define N 200005 #define mod 1000000007 using namespace std; int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +c…
题意:给一个只含a.b的字符串,求所有的回文不连续子序列. manacher+FFT. 先求出所有回文序列,再减去连续子序列(即回文串). 将a.b分开考虑,对于一个对称轴,以其为回文中心的回文序列的个数为 2^对称a.b个数-1.对称统计显然可以通过FFT求,然后再用manacher求回文串1即可. 调的好恶心啊!…
题面 Bzoj Sol 求不连续回文子序列的个数 \(ans=\)回文子序列个数-连续回文子序列个数 即回文子序列个数-回文子串个数 后面直接\(Manacher\)就好了 考虑前面的 枚举对称轴,设\(f[i]\)表示对称轴\(i\)两边相同字符的对数 那么最终答案就是\(\sum 2^{f[i]}-1\) 考虑求\(f[i]\) 只有当原串中的两个字符相同才会有贡献 也就是\(s[i-x]=s[i+x]\) 单独考虑\(a\)和\(b\)的贡献 \(f[i]=\sum [s[i-x]==s[…
前言 多项式真的很难♂啊qwq Solution 考虑求的是一个有间隔的回文串,相当于是: 总的答案-没有间隔的答案 考虑总的答案怎么计算?FFT卷一下就好了. 对于每一位字符,有两种取值,然后随便卷起来,卷起来就是当前这一位之前与它相同的字符个数(这一位不能是'0',也就是被排斥的那一位) 然后就可以轻松解决? 是的. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h&…
[bzoj3160]万径人踪灭 题意 给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数. \(n\leq 100000\) 分析 还是蛮不错的. 这道题基本上是自己想到的. 除了没有利用到'a'和'b'只有两个不同字符的特性. 求不连续回文子序列的个数. 首先问题可以进行转化: 根据容斥原理,用任意回文子序列的个数(1)-连续回文子序列(2)的个数. 问题(2),即连续回文子序列的个数,用Manacher很容易求出来. 所以现在考虑解决问题(1):任意回文子序列的个数. 我们的想法…
注:多项式的题目,数组应开:N的最近2的整数次幂的4倍. 多项式乘法 FFT模板 时间复杂度\(O(n\log n)\). 模板: void FFT(Z *a,int x,int K){ static int rev[N],lst; int n=(1<<x); if(n!=lst){ for(int i=0;i<n;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<x-1); lst=n; } for(int i=0;i<…