HDU5829 NTT
以下这份代码并没有过。但感觉没有问题。不是蜜汁WA就是蜜汁T。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;
const int mod = ;
const int N = , K = ;
int i;
int P = , G = , g[K+], ng[K+], inv[N+];
ll A[N*+], B[N*+];
ll pow(ll a, int n){
ll ans = ;
while(n){
if(n&)
ans = ans*a%P;
a = a*a%P;
n >>= ;
}
return ans;
}
void NTT(ll*a,int n,int t){
for(int i=,j=;i<n-;i++){
for(int s=n;j^=s>>=,~j&s;);
if(i<j)swap(a[i], a[j]);
}
for(int d=;(<<d)<n;d++){
int m=<<d,m2=m<<;
ll _w=pow(G, (P-)>>(d+));
if(t != ) _w = pow(_w, P-);
for(int i=;i<n;i+=m2)for(ll w=,j=;j<m;j++){
ll&A=a[i+j+m],&B=a[i+j],t=w*A%P;
A=B-t;if(A<)A+=P;
B=B+t;if(B>=P)B-=P;
w=w*_w%P;//////////////////////
}
}
if(t==-)for(int i=,j=pow(n, P-);i<n;i++)a[i]=a[i]*j%P;
} /*****************另一份NTT模板
void change (ll y[], int len) {
for(int i = 1, j = len / 2; i < len - 1; i++) {
if(i < j) swap(y[i], y[j]);
int k = len / 2;
while(j >= k) {
j -= k;
k /= 2;
}
if(j < k) j += k;
}
}
void ntt(ll y[], int len, int on) {
change (y, len);
for(int h = 2; h <= len; h <<= 1) {
ll wn = pow(G, (mod-1)/h);
if(on == -1) wn = pow(wn, mod-2);
for(int j = 0; j < len; j += h) {
long long w = 1;
for(int k = j; k < j + h / 2; k++) {
long long u = y[k];
long long t = w * y[k + h / 2] % mod;
y[k] = (u + t) % mod;
y[k+h/2] = (u - t + mod) % mod;
w = w * wn % mod;
}
}
}
if(on == -1) {
long long t = pow (len, mod - 2);
for(int i = 0; i < len; i++)
y[i] = y[i] * t % mod;
}
}
***************************/ int a[N];
int pow2[N], r[N], f[N], F[N]; int main(){
// freopen("in", "r", stdin);
// freopen("outd", "w", stdout);
// for(g[K]=pow(G,(P-1)/N),ng[K]=pow(g[K],P-2),i=K-1;~i;i--)
// g[i]=(ll)g[i+1]*g[i+1]%P, ng[i]=(ll)ng[i+1]*ng[i+1]%P;
for(inv[]=inv[]=,i=;i<N;i++) inv[i]=(ll)(P-inv[P%i])*(P/i)%P; for(f[]=f[]=r[]=r[]=pow2[]=, i=pow2[]=; i < N; i++){
r[i] = (ll)inv[i]*r[i-]%P;
f[i] = (ll)i*f[i-]%P;
pow2[i] = (pow2[i-]<<)%P;
} int t, ca = , n; scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(i = ; i <= n; i++) scanf("%d", a+i);
sort(a+, a+n+, greater<int>() ); memset(B, , sizeof(B));
memset(A, , sizeof(A));
for(i = ; i <= n; i++){
B[i-] = (ll)f[i-]*pow2[n-i]%P*a[i]%P;
A[i-] = r[n-i];
} int len = ;
while(len <= n+n) len <<= ;
NTT(B, len, ), NTT(A, len, );
for(int i = ; i < len; i++)
A[i] = B[i]*A[i]%P;
NTT(A, len, -); for(int i = ; i <= n; i++){
F[i] = A[n-+i]*(ll)r[i-]%P+F[i-];
if(F[i] >= P) F[i] %= P;
printf("%d ", F[i]);
}
puts("");
}
return ;
}
以上代码蜜汁T,NTT()换成ntt()后蜜汁WA。
和AC代码对拍很久也没看出什么问题。
HDU5829 NTT的更多相关文章
- Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
题目 Source http://www.tsinsen.com/A1493 Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在 ...
- HDU5322 Hope(DP + CDQ分治 + NTT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...
- Codeforces632E Thief in a Shop(NTT + 快速幂)
题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...
- hihoCoder1388 Periodic Signal(2016北京网赛F:NTT)
题目 Source http://hihocoder.com/problemset/problem/1388 Description Profess X is an expert in signal ...
- hihocoder #1388 : Periodic Signal NTT&FFT
传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门: (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但 ...
- FFT,NTT 专题
学习傅里叶的基本性质及其代码,可以参考大神理解 还有 ACdream 的博客 贴一下NTT的模板: using namespace std; typedef long long ll; int n; ...
- [快速数论变换 NTT]
先粘一个模板.这是求高精度乘法的 #include <bits/stdc++.h> #define maxn 1010 using namespace std; char s[maxn]; ...
- NTT
1 问题描述FFT问题解决的是复数域上的卷积.如果现在的问题是这样:给出两个整数数列$Ai,Bj,0\leq i\leq n-1,0\leq j\leq m-1$,以及素数$P$,计算新数列$Ci=( ...
- NTT【51nod】1514 美妙的序列
题意:1~n 的全排列中,有多少个排列满足任意从中间切成两段后,左边段的最大值大于右边段的最小值? 例如:n为3时有3种 2 3 1 3 1 2 3 2 1 解释:比如 2 3 1 (2) (3 1) ...
随机推荐
- web.xml中 error-page的正确用法
<error-page> <error-code>404</error-code> <location>/mvc/hello1?i=1</loca ...
- C#:简单线程样例
1.定义线程类及内部事件 using System; using System.Collections.Generic; using System.Text; using System.Threadi ...
- 用C#.NET编写软件注册机
验证注册码是保护软件产品产权的常用手段.一般过程如下, 1. 软件发行者收集用户特有的信息: 2. 根据用户特有的信息,使用注册机生成注册码并把注册码发给客户: 3. 向软件导入注册码,由软件自 ...
- [HTML]js动态修改表格里面的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/T ...
- 利用反射及jdbc元数据实现通用的查询方法
---------------------------------------------------------------------------------------------------- ...
- Poj(1273),最大流,EK
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 69355 Accepted: 2687 ...
- nautilus-open-terminal很有用的插件--鼠标右键打开终端
1.1fedora安装# yum -y install nautilus-open-terminal安装nautilus-open-terminal,注销下X桌面即可ubuntu安装#sudo apt ...
- 2016年12月13日 星期二 --出埃及记 Exodus 21:8
2016年12月13日 星期二 --出埃及记 Exodus 21:8 If she does not please the master who has selected her for himsel ...
- 命令行下运行php的方法和技巧
linux中直接用"php"命令来执行php文件 一般在linux命令行下运行php文件的代码: XML/HTML代码 linux下执行:#php安装路径 -f php文件路径 例 ...
- profile、bashrc、bash_profile之间的区别和联系
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...