hdu5829
多校训练8,有官方题解
主要之前没写过ntt,感觉不是很懂原根
先贴一份当模板吧
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
const int mo=;
const int g=;
int e[],a[*],b[*],jc[],d[],ni[],r[*];
int w[][],ans[],rg[];
int cas,m,n;
bool cmp(int a,int b)
{
return a>b;
} ll quick(ll x,int y)
{
ll s=;
while (y)
{
if (y&) s=s*x%mo;
x=x*x%mo; y>>=;
}
return s;
}
void ntt(int *a, int f)
{
for (int i=; i<n; i++)
if (i<r[i]) swap(a[i],a[r[i]]);
int now=;
for (int i=; i<n; i<<=)
{
int p=w[++now][f];
for (int j=; j<n; j+=i<<)
{
int w=;
for (int k=; k<i; k++)
{
int u=a[k+j],v=1ll*w*a[j+k+i]%mo;
a[j+k]=(u+v)%mo;
a[j+k+i]=(u-v+mo)%mo;
w=1ll*w*p%mo;
}
}
}
} int main()
{
freopen("1.in","r",stdin);
int now=(mo-)/,ng=quick(g,mo-),l=;
while (now%==)
{
w[++l][]=quick(g,now);
w[l][]=quick(ng,now);
rg[l]=quick(<<l,mo-);
now>>=;
}
jc[]=d[]=ni[]=;
for (int i=; i<=; i++)
{
jc[i]=1ll*jc[i-]*i%mo;
ni[i]=quick(jc[i],mo-);
d[i]=*d[i-]%mo;
}
scanf("%d",&cas);
while (cas--)
{
scanf("%d",&m);
for (int i=; i<=m; i++)
scanf("%d",&e[i]);
sort(e+,e++m,cmp);
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for (int i=; i<=m; i++)
a[i]=1ll*jc[i-]*d[m-i]%mo*e[i]%mo;
for (int i=; i<=m; i++)
b[m-i]=ni[i];
/* for (int i=m+1; i<2*m+1; i++)
{
int s=0;
for (int j=0; j<=i; j++) s=(s+1ll*a[j]*b[i-j]%mo)%mo;
cout <<1ll*s*ni[i-m-1]%mo<<" ";
}
cout <<endl;
break;*/
int l=;
for (n=; n<=*m+; n<<=) l++;
for (int i=; i<n; i++) r[i]=(r[i>>]>>)|((i&)<<(l-));
ntt(a,); ntt(b,);
for (int i=; i<n; i++) a[i]=1ll*a[i]*b[i]%mo;
ntt(a,);
for (int i=m+; i<*m+; i++)
ans[i-m]=1ll*a[i]*ni[i-m-]%mo*rg[l]%mo;
for (int i=; i<=m; i++)
ans[i]=(ans[i-]+ans[i])%mo;
for (int i=; i<=m; i++)
printf("%d ",ans[i]);
cout <<endl;
}
return ;
}
hdu5829的更多相关文章
- HDU5829 NTT
以下这份代码并没有过.但感觉没有问题.不是蜜汁WA就是蜜汁T. #include <cstdio> #include <iostream> #include <cstri ...
- hdu5829 Rikka with Subset
首先考虑本题的$O(n^2)$做法. $Part1$ 对原序列从大到小排序后,考虑每个数字对最终答案的贡献,有第x个数字对答案的贡献十分难以计算,所以考虑计算数字x是集合第K大的方案数,作为数字x对$ ...
- 多项式相关&&生成函数相关&&一些题目(updating...)
文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...
随机推荐
- 用Electron开发桌面应用app的相关文献集锦
1. 超棒的发声器(项目实战) 原文点此链接 2. Electron中文文档 原文点此链接
- ThreadLocal 验明正身
一.前言 之前ThreadLocal使用不多,有个细节也就注意不到了:ThreadLocal在多线程中到底起什么作用?用它保存的变量在每个线程中,是每个线程都保存一份变量的拷贝吗?带着这些问题,我查了 ...
- [Java] 文件上传下载项目(详细注释)
先上代码,最上方注释是文件名称(运行时要用到) FTServer.java /* FTServer.java */ import java.util.*; import java.io.*; publ ...
- Windows查看进程CMD命令和终止进程CMD命令
将小米路由器3刷机成openwrt的方法,请参考上篇文章< 家庭宽带多运营商接入方案>这里介绍怎么在已经刷成openwrt系统的小米路由器3上安装私有云nextcloud openwrt开 ...
- BZOJ4012 [HNOI2015]开店 【动态点分治 + splay】
题目链接 BZOJ4012 题解 Mychael并没有A掉,而是T掉了 讲讲主要思路 在点分树上每个点开两棵\(splay\), 平衡树\(A\)维护子树中各年龄到根的距离 平衡树\(B\)维护子树中 ...
- jw player学习笔记
一.是否支持IE7/8 本地离线播放不支持IE7/8,部署在服务器上时可以. 本地播放报错示意图 二.如何去Logo 1.网页版--HTML5---破解 桌面浏览器看到的效果: jwplayer(&q ...
- P值
https://baike.baidu.com/item/P%E5%80%BC/7083622?fr=aladdin https://baijiahao.baidu.com/s?id=15960976 ...
- 「6月雅礼集训 2017 Day1」看无可看
[题目大意] 给出n个数,a[1]...a[n],称作集合S,求
- django返回二进制图片
@login_required def down_img(request, path): content = Storage().download(path) from django.http imp ...
- csrf_execmp
参考;https://www.cnblogs.com/zhaof/p/6281482.html 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部 ...