首先考虑本题的$O(n^2)$做法。

$Part1$
对原序列从大到小排序后,考虑每个数字对最终答案的贡献,有第x个数字对答案的贡献十分难以计算,所以考虑计算数字x是集合第K大的方案数,作为数字x对$ans(K)$的贡献,然后对$ans$求前缀和,这样得到了x是集合第1~K大的对答案的贡献

$Part2$
考虑计算$ans(K)$只考虑子集合之中第K大的数的贡献,显然有
$$ ans(k) = \sum_{i=k}^n {C_{i-1}^{k-1}*2^{n-i}*a(i)} $$
( $a(i)$表示排序后的原序列 )
显然是一个卷积的形式。
$$ ans(k)*(k-1)! = \sum_{i=k}^n{\frac{1}{(i-k)!} * 2^{n-i}*a(i)*(i-1)! } $$
$A0(i) = 2^{n-i}*a(i)*(i-1)!$
$A(i) = A0(n-i)$
$B(i) = \frac{1}{i!} $
$C0(i) = ans(k)*(k-1)!*$
$C(i) = C0(n-i)$

$$ C(k) = \sum_{i=0}^{k}{A(i)*B(k-i)} $$
多项式乘法形式,用NTT或者FFT实现O(nlogn)

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> #define mod0 998244353
#define gn 3
#define N 400010
#define LL long long using namespace std; inline int mul(int a,int b,int P){
if(a*(LL)b<(LL)P) return a*b;
return (int)(a*(LL)b%(LL)P);
} inline int add(int a,int b,int P){
if(a+b>=P) return a+b-P;
return a+b;
} inline int qpow(int x,int n,int P){
int ans=;
for(;n;n>>=,x=mul(x,x,P))
if(n&) ans=mul(ans,x,P);
return ans;
} int wt[N],R[N]; void fnt(int *x,int n,int t,int P){
for(int i=;i<n;i++) if(i<R[i]) swap(x[i],x[R[i]]);
for(int m=;m<n;m<<=){
int wn=qpow(gn,(P-)/(m<<),P);
if(t==-) wn=qpow(wn,P-,P);
wt[]=;
for(int i=;i<m;i++) wt[i]=mul(wt[i-],wn,P);
for(int k=;k<n;k+=(m<<))
for(int i=;i<m;i++){
int &A=x[i+m+k];
int &B=x[i+k],t=mul(A,wt[i],P);
A=add(B,P-t,P); B=add(B,t,P);
}
}
if(t==-){
int tmp=qpow(n,P-,P);
for(int i=;i<n;i++) x[i]=mul(x[i],tmp,P);
}
} int n,m;
int a[N],b[N],c[N],ans[N],fac[N],a0[N]; void mulpoly(int P){
m=*n;
int L=,n;
for(n=;n<=m;n<<=) L++;
for(int i=;i<n;i++) R[i]=(R[i>>]>>)|((i&)<<(L-));
fnt(a,n,,P); fnt(b,n,,P);
for(int i=;i<n;i++) c[i]=mul(a[i],b[i],P);
fnt(c,n,-,P);
for(int i=;i<=n;i++) a[i]=b[i]=;
} bool cmp(int a,int b){
return a>b;
} int inv(int x,int P){
return qpow(x,P-,P);
} int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a0[i]);
sort(a0+,a0+n+,cmp);
fac[]=;
for(int i=;i<=n;i++) fac[i]=mul(fac[i-],i,mod0);
for(int i=;i<=n;i++){
a0[i]=mul(a0[i]%mod0,qpow(,n-i,mod0),mod0);
a0[i]=mul(a0[i],fac[i-],mod0);
}
for(int i=;i<=n;i++){
a[i]=a0[n-i];
b[i]=inv(fac[i],mod0);
}
mulpoly(mod0);
for(int i=;i<=n;i++) ans[i]=mul(c[n-i], inv(fac[i-],mod0),mod0);
for(int i=;i<=n;i++) ans[i] = add(ans[i],ans[i-],mod0);
for(int i=;i<=n;i++) printf("%d%c",ans[i],i==n?'\n':' ');
}
return ;
}

hdu5829 Rikka with Subset的更多相关文章

  1. HDU 6092`Rikka with Subset 01背包变形

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  2. HDU 6092 Rikka with Subset

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  3. HDU 6092 17多校5 Rikka with Subset(dp+思维)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  4. hdu 6092 Rikka with Subset(逆向01背包+思维)

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  5. Rikka with Subset

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. 2017杭电多校第五场Rikka with Subset

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  7. Rikka with Subset HDU - 6092 (DP+组合数)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  8. 2017 ACM暑期多校联合训练 - Team 5 1008 HDU 6092 Rikka with Subset (找规律)

    题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...

  9. HDU - 5829:Rikka with Subset (NTT)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

随机推荐

  1. mysql大数据量分页查询优化

    参考文章:https://www.dexcoder.com/selfly/article/293 Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了. 传统分页查询:SELECT ...

  2. 社会信息化环境下的IT新战略

    我们现在所处的信息化环境正在发生改变,技术已经成为影响组织的最重要的外部力量,传统的正金字塔的结构被移动互联网深深改变:员工能够更加自由的获取信息,变成更多的信息链接,这种链接不光连接人和组织,还连接 ...

  3. 【转】DSP是什么--DSP是神马东东??

    原文:http://www.eepw.com.cn/article/272908.htm 导读:本文主要介绍的是DSP是什么,不懂得童鞋们快随小编一起学习一下DSP到底是个神马东东吧! 本文引用地址: ...

  4. SolidEdge 工程图中如何显示彩色工程图

    点击这个按钮,然后更新视图   效果如下图所示,注意如果你的装配图(.dft文件)是单独拷贝出来的,装配图所引用的零件无法追溯到,则无法渲染这些零件,因此无法制作彩色工程图.

  5. CentOS安装Openfire服务

    原文::http://xiao987334176.blog.51cto.com/2202382/979677 系统是全新新安装的系统.版本号是Centos 5.6 x86 同步北京时间 # ntpda ...

  6. AliYunDun关闭

    停止阿里云盾AliYunDun服务解决大量写磁盘问题-小内存ECS服务器 阿里云数据库在没备案,涉及大量IO操作时会自动启动阿里云盾这个服务,会导致服务器变得很卡 关闭服务: service aegi ...

  7. SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)

    Visible Lattice Points Consider a N*N*N lattice. One corner is at (0,0,0) and the opposite one is at ...

  8. centos下部署项目问题

    最近写了商品管理的后台完成了一部分,用node+koa+mongodb搭建,现在想部署到自己的服务器上,部署的过程中遇到了一些坑.首先就是各种环境的搭建,搭建好了之后要把后台的代码传到服务器上运行,运 ...

  9. 云打印-Beta-凡事预则立

    凡事预则立 课程名称:软件工程1916|W(福州大学) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标:Beta冲刺 团队队员 队员学号 队员姓名 个人博客地址 备注 221600 ...

  10. Mac中配置eclipse的php开发环境

    1.mac中自带php和apache,不过版本不是最新的. 2.打开apache配置文件中php相关设置,并设置php的工程目录为你想要的目录 3.复制php.ini.default为php.ini, ...