[CODECHEF]EASYEX
题意:有一个$k$面的骰子,上面的数字为$1\cdots k$,现在要丢$n$次骰子,设$n$次中有$a_i$次扔到数字$i$,给定$l,f$,求$\prod\limits_{i=1}^la_i^f$的期望,对$p=2003$取模
设$lf$个随机$0/1$变量$x_{i,j}$表示第$j$次的数字是否为$i$,那么每个变量都有$\frac1k$的概率为$1$,我们要求$\prod\limits_{i=1}^l\left(\sum\limits_{j=1}^nx_{i,j}\right)^f$的期望
如果把这个式子展开,最终的式子形如许多个$\prod x_{?,?}^?$之和,如果有一项同时含有$x_{a,j},x_{b,j}(a\neq b)$,那么它对答案的贡献为$0$,不妨对这些项按“含多少个不同的$x_{?,j}$”进行分类,最后再把每一类的结果加起来即可
设$f_{i,j}$表示在前$i$个$\left(\sum x_{?,?}\right)^f$中,选出$j$个不同的$x_{?,?}$的方案数(不考虑选的顺序),那么$f_{i,j}=\sum\limits_{k=1}^ff_{i-1,j-k}{f\brace k}$(在这$\left(\sum x_{?,?}\right)^f$中必须选$f$个$x_{?,?}$,去重后要得到$k$个不同的$x_{?,?}$,这样的方案与子集划分一一对应,考虑每个$x_{i,j}$第一次被选的位置和一个子集划分中每个子集的第一个元素即可得到它们是一一对应的)
设$g_i$表示最终选出来含$i$个不同的$x_{?,j}$的方案数,那么$g_i=[x^i]\left(\sum\limits_{i=1}^f{f\brace i}x^i\right)^l$,考虑顺序和概率后,答案就是$\sum\limits_{i=l}^{lf}n^\underline i\left(\frac1k\right)^ig_i$
因为答案中含下降幂,所以$i\geq p$的项都是$0$,于是算$g$只用暴力卷积到$p$位,总时间复杂度$O(p^2\log l)$
#include<stdio.h>
#include<string.h>
typedef long long ll;
const int mod=2003;
int pow(int a,int b){
int s=1;
while(b){
if(b&1)(s*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return s;
}
int S[1010][1010];
void pre(int n){
int i,j;
S[0][0]=1;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)S[i][j]=(S[i-1][j-1]+S[i-1][j]*j)%mod;
}
}
struct poly{
int x[mod];
poly(){memset(x,0,sizeof(x));}
int&operator[](int k){return x[k];}
};
ll t[mod];
poly operator*(poly a,poly b){
int i,j;
poly c;
memset(t,0,sizeof(t));
for(i=0;i<mod;i++){
for(j=0;j<mod;j++){
if(i+j<mod)t[i+j]+=a[i]*b[j];
}
}
for(i=0;i<mod;i++)c[i]=t[i]%mod;
return c;
}
poly pow(poly a,int b){
poly s;
s[0]=1;
while(b){
if(b&1)s=s*a;
a=a*a;
b>>=1;
}
return s;
}
poly p;
void work(){
int n,k,l,f,i,s,d,t;
scanf("%d%d%d%d",&n,&k,&l,&f);
memset(p.x,0,sizeof(p.x));
for(i=1;i<=f;i++)p[i]=S[f][i];
p=pow(p,l);
k=pow(k%mod,mod-2);
s=0;
d=1;
t=pow(k,l);
for(i=0;i<l;i++)(d*=(n-i)%mod)%=mod;
for(i=l;i<=l*f&&d;i++){
(s+=(ll)d*t*p[i]%mod)%=mod;
(d*=(n-i)%mod)%=mod;
(t*=k)%=mod;
}
printf("%d\n",s);
}
int main(){
int T;
pre(1000);
scanf("%d",&T);
while(T--)work();
}
[CODECHEF]EASYEX的更多相关文章
- 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1288 Solved: 490 ...
- 【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...
- codechef 两题
前面做了这场比赛,感觉题目不错,放上来. A题目:对于数组A[],求A[U]&A[V]的最大值,因为数据弱,很多人直接排序再俩俩比较就过了. 其实这道题类似百度之星资格赛第三题XOR SUM, ...
- codechef January Challenge 2014 Sereja and Graph
题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...
- BZOJ3509: [CodeChef] COUNTARI
3509: [CodeChef] COUNTARI Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 339 Solved: 85[Submit][St ...
- CodeChef CBAL
题面: https://www.codechef.com/problems/CBAL 题解: 可以发现,我们关心的仅仅是每个字符出现次数的奇偶性,而且字符集大小仅有 26, 所以我们状态压缩,记 a[ ...
- CodeChef FNCS
题面:https://www.codechef.com/problems/FNCS 题解: 我们考虑对 n 个函数进行分块,设块的大小为S. 每个块内我们维护当前其所有函数值的和,以及数组中每个元素对 ...
- codechef Prime Distance On Tree(树分治+FFT)
题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...
- BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )
树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...
随机推荐
- (值类型引用类型)和null的关系
1.null null表示变量没有指向任何对象. 2.值类型 包括 bool.结构体.枚举.int.double.float等等 .在.NET中值类型都继承自ValueType. 3. 引 ...
- Node.js的开源博客系统Ghost搭建教程
准备工作 Node.js版本:0.10.x.0.12.x.4.2.x.安装步骤可参考:Node.js环境搭建 Ghost版本:0.7.4:中文集成版(33.6M),中文标准版(3.39M),英文原版( ...
- 2017ACM暑期多校联合训练 - Team 7 1002 HDU 6121 Build a tree (深搜+思维)
题目链接 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n− ...
- Linux增加swap文件
起因 在阿里云搞了台ECS,但是内存就1个G,操作总是悲剧的卡卡卡,于是就想着增加一点交换文件来缓解一下. 快速添加交换文件 step 1. 生成文件 先填充一个大文件,等会儿当做交换文件用: dd ...
- 简单漂亮的php验证码函数
/* *说明:函数功能是生成验证码 * 参数说明:输入 长度,宽度,高度 */ function vcode($_code_length = , $_width = , $_height = ){ $ ...
- 理解一条语句:SELECT difference(sum("value")) FROM "mq_enqueue" WHERE "channel" =~ /ActiveMQ_TEST/ AND $timeFilter GROUP BY time($interval)
最近使用grafana在查询InfluxDB中,用到了这一条语句 SELECT difference(sum("value")) FROM "mq_enqueue&quo ...
- MySQL 作业题及答案
MySQL 测试题 一. 表关系: 请创建如下表,并创建相关约束 创建表sql如下: /* Navicat MySQL Data Transfer Source Server : 192.168.11 ...
- linux下rz,sz安装
1.sz rz yum安装 yum install lrzsz
- hdu 4678
HDU 4768: Flyer 题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2... && A+k*C <= B).题目保证 ...
- ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常
Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...