BZOJ 4259 FFT】的更多相关文章

思路: 为什么好多字符串的题都可以用FFT啊.... 我们其实是要判断$\Sigma (a[i]-b[i])^2*a[i]*b[i]==0$ 那就把a串翻转过来 把 上式展开 大力做几遍FFT就好啦~ //By SiriusRen #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define double long…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4259 [题目大意] 给出两个包含*和小写字母的字符串,*为适配符,可以和任何字符匹配,求出第一个字符串在第二个字符串中出现的位置. [题解] 我们定义f[x]=sum_{i=0}^{n-1}|s1[i]-s2[i]|,当f[x]=0时,两个字符串相等.因为考虑到这里还有适配符,所以用f[x]=sum_{i=0}^{n-1}(s1[i]-s2[i])*(s1[i]-s2[i])*s1[…
4259: 残缺的字符串 题意:s,t,星号任意字符,匹配方案数 和上题一样 多乘上一个\(a_{j+i}\)就行了 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N=(1<<20)+5;…
[题目分析] 同bzoj4503. 只是精度比较卡,需要试一试才能行O(∩_∩)O 用过long double,也加过0.4.最后发现判断的时候改成0.4就可以了 [代码] #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 1200005 #…
和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一个原串字符 有点卡常,先在点值下算最后一起IDFT #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const int N=1100005; int n,m,bt,lm,re[N],tot;…
bzoj 2179 Description 给出两个n位10进制整数x和y,你需要计算x*y. [题目分析] 高精裸题.练手. [代码] 1.手动高精 #include<cstdio> #include<cstring> using namespace std; #define MAXN 5000 char a_s[MAXN],b_s[MAXN]; int a_len,b_len,i,c[MAXN][MAXN],k,j,sum[MAXN],a[MAXN],b[MAXN]; int…
Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想对这两个串重新进行匹配,其中A为模板串,那么现在问题来了,请回答,对于B的每一个位置i,从这个位置开始连续m个字符形成的子串是否可能与A串完全匹配? Input 第一行包含两个正整数m,n(1<=m<=n<=300000),分别表示A串和B串的长度. 第二行为一个长度为m的…
2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2923  Solved: 1498[Submit][Status][Discuss] Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出一行,即x*y的结果. Sample Input 1 3 4 Sample Outpu…
fft. #include<set> #include<map> #include<ctime> #include<queue> #include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<cstdlib> #include<complex> #include<iostream> #…
思路 同样是FFT进行字符串匹配 只不过两个都有通配符 匹配函数再乘一个\(A_i\)即可 代码 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; const int MAXN = 1200000; const int MOD = 998244353; const int G = 3; const int invG =…
 有n个小朋友,m颗糖,你要把所有糖果分给这些小朋友. 规则第 i 个小朋友没有糖果,那么他之后的小朋友都没有糖果..如果一个小朋友分到了 xx 个糖果,那么的他的权值是 f(x) = ox^2 + sx + u 没有分到糖果的小朋友的权值是 1 每种方案的权值是各个小朋友权值的乘积 求出所有方案的权值和   设g(i,j)表示前i个小朋友分j个糖果的权值乘积和 很容易得到一个式子 这个显然是一个卷积用FFT就可以处理 但是问题来了 我们如何得到ans呢 n<=1e8  朴素的算法不太行 要想办…
题意显然 ans=回文子序列数目 - 回文子串数目 回文子串直接用马拉车跑出来 回文子序列一开始总是不知道怎么求 (太蠢了) 后面看了题解 构造一个神奇的卷积 (这个是我盗的图)地址 后面还有一些细节需要处理出 f[x] (f[x] 表示 x左右相等的个数) 通常我们需要的情况是 两个函数相乘 这里是s[x-i] == s[x+i] 分类讨论就行了  变成1*1=1的形式 所以要a=1 b=0 和 a=0 b=1都算一次 这里长度扩展了一倍 表示 当 i 是奇数时表示对称轴是元素 ,偶数表示对称…
2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MB Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出一行,即x*y的结果. Sample Input 1 3 4 Sample Output 12 数据范围: n<=60000 HINT #include<map> #include…
Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出一行,即x*y的结果. Sample Input 1 3 4 Sample Output 12 数据范围: n<=60000 Solution 水体一道 把一个数变化一下, \(\overline {xyz}=x*10^2+y*10^1+z*10^0\) ,就是一个多项式形式了 两个数相乘,多项式相…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2179 默写板子,注释的是忘记的地方. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; typedef double db; <<); db co…
[题目分析] 快速傅里叶变换用于高精度乘法. 其实本质就是循环卷积的计算,也就是多项式的乘法. 两次蝴蝶变换. 二进制取反化递归为迭代. 单位根的巧妙取值,是的复杂度成为了nlogn 范德蒙矩阵计算逆矩阵又减轻了拉格朗日插值法的复杂度. 十分神奇. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <set> #includ…
思路: 最裸的方程:f[i][j]=Σf[i-1][j-k]*F[k] 诶呦 这不是卷积嘛 f[i]就可以用f[i-1]卷F 求到 但是这样还是很慢 设p[i] 为Σ f[j](1<=j<=i) 发现p可以倍增推 于是  就 倍增一下  就完了... http://www.cnblogs.com/Skyminer/p/6561689.html hz神犇的题解写得非常详细.. //By SiriusRen #include <cmath> #include <cstdio>…
Code: #include<bits/stdc++.h> #define maxn 1200000 using namespace std; void setIO(string s) { string in=s+".in", out=s+".out"; freopen(in.c_str(),"r",stdin); freopen(out.c_str(),"w",stdout); } #define pi 3.14…
思路: 这道题思路好奇怪--. 我们先要知道关于x (x可以是间隙) 对称的有几对字母 显然暴力是n^2的 那怎么办呢 先把所有'a'看成1 'b'看成0 意外的发现 这不就是卷积嘛 再倒过来搞一搞 加一下 2^x-1就是包含连续的回文串的解了 然后 跑个manacher 把包含的删掉就好啦 时间复杂度是O(nlogn)的 代码: //By SiriusRen #include <cstdio> #include <complex> #include <cstring>…
思路: 题目中给的是差值一定的 那么就把b数组倒一下 不就变成 i+j=k(k为定值的了嘛) 嗯 然后搞个FFT //By SiriusRen #include <cstdio> #include <complex> using namespace std; typedef complex<double> cplxd; const int N=270000;const double pi=acos(-1); int n,m,R[N],L; cplxd a[N],b[N]…
思路:FFT板子题 //By SiriusRen #include <cstdio> #include <complex> using namespace std; typedef complex<double> cplxd; const int N =133333;const double pi=3.1415926535897932; int n,m,L,R[N],c[N]; char ch[N]; cplxd a[N],b[N]; void fft(cplxd *a…
求两个高精度的乘法. 根据高位低位,填入多项式的系数,求两个卷积,然后进位操作.…
题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 这样做 . 把通配符设成 \(0\) 然后 . 别的按 \(\mathrm{ASCII}\) 码 给值 , 最后把他写成式子的形式 ... 后来发现太年轻了 qwq 先要做这题 , 那么先发现性质咯 : 存在一个长度为 \(len\) 的 \(border\) 当且仅当对于 \(\forall i…
[题意]给定长度为m的匹配串B和长度为n的模板串A,求B在A中出现多少次.字符串仅由小写字母和通配符" * "组成,其中通配符可以充当任意一个字符.n<=3*10^5. [算法]FFT [题解]假设模板串的数组A用0~26代表所有字符,0为通配符,匹配串的数组B同理,那么用表示差异的经典套路: $$C_n=\sum_{i=0}^{m-1}(A_{n+i}-B_i)^2*A_{n+i}*B_i$$ 那么可以看出$C_n=0$当且仅当$S_A[n,n+m-1]=S_B[0,m-1]$…
第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度空降为O(nlogn)←个人的愚蠢理解请随意吐槽 具体的我就不说了,算导上都说得很清楚,说得好像有人会听我说什么似的 模板在这里↓ CodeVS 3123: #include<cmath> #include<cstdio> #include<cstring> #includ…
FFT 做的第二道用到FFT的……好吧其实还是模板题-_-b 百度上说好像分治也能做……不过像FFT这种敲模板的还是省事=.= /************************************************************** Problem: 2179 User: Tunix Language: C++ Result: Accepted Time:1236 ms Memory:9184 kb *************************************…
bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b<=c\)的个数 f[i]是i出现的个数 g[i]表示a+b=i的个数,a<=b 这个可以fft加速到\(nlogn\)统计. 具体的,fft算出ff的卷积,减去自己自己的贡献,然后/2就是了g[i]. 不合法方案数就是:\(\sum f[i]*g[i]\) 最终答案是\(ans=\frac{C_n^3…
BZOJ 洛谷 https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p3779# 正态分布 正态分布是随机变量\(X\)的一种概率分布形式.它用一个期望\(\mu\)和方差\(\sigma^2\)就可以描述,记为\(N(\mu,\sigma^2)\). 若随机变量\(X\)服从一个数学期望为\(\mu\).方差为\(\sigma^2\)的正态分布,记作\(X\sim N(\mu,\sigma^2)\),读作\(X\)服从\(N(\mu,\…
BZOJ 3527 力 | 分治 题意 给出数组q,$E_i = \sum_{i < j} \frac{q_i}{(i - j) ^ 2} - \sum_{i > j} \frac{q_i}{(i - j) ^ 2} $. 题解 求出减号前面一部分(设为A(i)),再求出减号后面的一部分(设为B(i)). 具体怎么求呢?还是转换成多项式乘法. 设\(f(i) = q[i]\),翻转后成为\(f'(i)\). 设\(g(i) = \frac{1}{i^2}, g(0) = 0\). \[A(i)…
BZOJ 2194 快速傅立叶变换之二 题意 给出两个长为\(n\)的数组\(a\)和\(b\),\(c_k = \sum_{i = k}^{n - 1} a[i] * b[i - k]\). 题解 我们要把这个式子转换成多项式乘法的形式. 一个标准的多项式乘法是这样的: \[c_k = \sum_{i = 0}^{k} a[i] * b[k - i]\] 来看看原式: \[c_k = \sum_{i = k}^{n - 1} a[i] * b[i - k]\] 将a翻转得到a': \[c_k…