NTT模板(无讲解)】的更多相关文章

#include<bits/stdc++.h>//只是在虚数部分改了一下 using namespace std; typedef long long int ll; ; ; ; ; ll n,m,limit,r[maxn*],len,f[maxn],g[maxn]; ll qpow(ll x,ll y) { ll ans=,base=x; while(y) { )ans=ans*base%mod; base=base*base%mod; y>>=; } return ans; }…
怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了. // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; ; ],val[maxn],ans[maxn],n,m,opt,x,y,z; bool tag[maxn]; ]==x||son[fa[x]][]==x;} ]]^ans[son[x][]]^val[x];} void pushr(int x) { swap(son[x][],son…
想着费马定理和二次探测定理就能随手推了. 做一次是log2n的. #include<bits/stdc++.h> using namespace std; typedef long long int ll; ll T,n; ll qpow(ll x,ll y,ll mod) { ll ans=,base=x; while(y) { )ans=ans*base%mod; base=base*base%mod; y>>=; } return ans; } bool check(ll p…
#include<bits/stdc++.h> using namespace std; ; const double pi=3.1415926535898; ],len; struct com { double a,b; com(,){a=A,b=B;} void operator=(com x){a=x.a,b=x.b;} com operator+(com x){return com(a+x.a,b+x.b);} com operator-(com x){return com(a-x.a…
NTT(快速数论变换)用到的各种素数及原根: https://blog.csdn.net/hnust_xx/article/details/76572828 NTT多项式乘法模板 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; ; //119*2^23+1 g=3 <<)+; ; int rev[N]; LL…
自己整理出来的模板 存在的问题: 1.多项式求逆常数过大(尤其是浮点数FFT) 2.log只支持f[0]=1的情况,exp只支持f[0]=0的情况 有待进一步修改和完善 FFT: #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; ); ,M=1e6+,mod=; int n,m,n2,a[N]; int Pow(int x,int p) { ; ,x=(ll)x*x%mod…
读书笔记终于写完了,写一下我对KMP的理解. KMP的思想就是尽量利用已经得到的信息,来降低时间复杂度,已经得到的信息存放在next数组里.算法确实很难理解,所以很难讲解..举个例子来说吧. 设字符串是str[],next[5] = 2. 就表示str[5]前面的2个字符,与str[2]前面的2个字符相同,也就是str[0] == str[3], str[1] == str[4],这样把str[2]平移到str[5]的位置以后,就能保证前面的已经匹配了.就是下图: 目标串    ........…
注意!本帖不是算法介绍!只是贴代码(逃) //嫌stdlib的rand太慢,手打了一个 /* Author: hotwords */ typedef unsigned int tkey; class Random { private: tkey rs1,rs2,rs3; public: tkey operator()() { rs1=(rs1<<)^(rs2>>)^rs3; rs2=(rs2<<)^(rs3>>)^rs1; rs3=(rs1<<)…
题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边,然后处理.应该先递归左边,然后处理,再递归右边,保证右边的所有需要的转移已经被计算出来. 参考代码: #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+10; const int p(998244353); int…
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: the length of each integer will not exceed 50000. Output For each case, output A * B in one line. Sample Input 1 2…