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) ...
随机推荐
- PHP array_count_values() 函数用于统计数组中所有值出现的次数。
定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 语法 array_count ...
- 【css】多行文字图片混排容器内垂直居中解决方案
css: .box-wrap{display:table;width:200px;height:200px;*position:relative;}/*最外边的容器,需固定宽高*/ .box-ha ...
- BZOJ 1036:树的统计Count(树链剖分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:中文题意. 思路:也是普通的树链剖分.唯一注意的点是在change函数中 while(t ...
- 《More Effective C++》
new operator申请内存,并调用构造函数: 而operator new只申请内存: new operator会调用operator new来申请内存:operator new可以重写或重载: ...
- 解决php与IIs的冲突
ISS与apache 服务器的默认端口号为 :80: 在浏览时,无法访问到. 可以将 apache的端口 改变即可: Apache安装好后,在其安装目录下的conf文件夹内会有httpd.conf这样 ...
- jquery 当前链接激活传递参数|div的切换显示
一.链接激活时传递参数 $("a").click(function(){ var obj=$(this).attr("field"); //获取当前field ...
- 6.shap以及selector的使用
功能:相当于自定义一个模板 首先,要新建一个drawble文件夹 然后,再新建一个XML文件 在<shap></shap>中写内容 <corners/>圆角 < ...
- HDU-1042 N!
首先明白这是大数问题,大数问题大多采用数组来实现.如何进位.求余等.比如1047 (Integer Inquiry): 对于1042问题 计算10000以内数的阶乘,因为10000的阶乘达到35660 ...
- 使用 MNIST 图像识别数据集
机器学习领域中最迷人的主题之一是图像识别 (IR). 使用红外系统的示例包括使用指纹或视网膜识别的计算机登录程序和机场安全系统的扫描乘客脸寻找某种通缉名单上的个人.MNIST 数据集是可用于实验的简单 ...
- DataRow数组转换DataTable
public DataTable ToDataTable(DataRow[] rows) { if (rows == null || rows.Length == 0) return null; Da ...