Description

M个球,一开始每个球均有一个初始标号,标号范围为1~N且为整数,标号为i的球有ai个,并保证Σai = M
每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为kk < N),则将它重新标号为k + 1;若这个球标号为N,则将其重标号为1。(取出球后并不将其丢弃)
现在你需要求出,经过K次这样的操作后,每个标号的球的期望个数。

Input

第1行包含三个正整数NMK,表示了标号与球的个数以及操作次数。
第2行包含N非负整数ai,表示初始标号为i的球有ai个。

Output

应包含N行,第i行为标号为i的球的期望个数,四舍五入保留3位小数。

Sample Input

2 3 2
3 0

Sample Output

1.667
1.333

HINT

【样例说明】

第1次操作后,由于标号为2球个数为0,所以必然是一个标号为1的球变为标号为2的球。所以有2个标号为1的球,有1个标号为2的球。

第2次操作后,有1/3的概率标号为2的球变为标号为1的球(此时标号为1的球有3个),有2/3的概率标号为1的球变为标号为2的球(此时标号为1的球有1个),所以标号为1的球的期望个数为1/3*3+2/3*1 = 5/3。同理可求出标号为2的球期望个数为4/3。

【数据规模与约定】

对于10%的数据,N ≤ 5, M ≤ 5, K ≤ 10;

对于20%的数据,N ≤ 20, M ≤ 50, K ≤ 20;

对于30%的数据,N ≤ 100, M ≤ 100, K ≤ 100;

对于40%的数据,M ≤ 1000, K ≤ 1000;

对于100%的数据,N ≤ 1000, M ≤ 100,000,000, K ≤ 2,147,483,647。

/*
设f[i][j]为经过i次操作,编号为j的球的期望个数。
转移方程:f[i+1][j%n+1]+=f[i][j]/m;
f[i+1][j]+=f[i][j]*(m-1)/m。
我想的矩阵乘法是设一个n*n的矩阵来表示各个编号的转移关系,但是复杂度不够,一种神奇的思路是设一个1*n的矩阵来表示每个点转移到它以下第几个点的贡献,因为对于每个编号来说,贡献是完全相同的所以可以这样转移。
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define N 1010
using namespace std;
int n,m,K,a[N];
double ans[N];
struct M{
double v[N];
M(){
memset(v,,sizeof(v));
}
friend M operator*(M a,M b){
M c;
for(int i=;i<n;i++)
for(int k=;k<n;k++)
c.v[i]+=a.v[(i-k+n)%n]*b.v[k];
return c;
}
friend M operator^(M a,int b){
M ans;
ans.v[]=;
for(int i=b;i;i>>=,a=a*a)
if(i&)ans=ans*a;
return ans;
}
}B;
int main(){
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
B.v[]=(1.0-1.0/m);B.v[]=1.0/m;
B=B^K;
for(int i=;i<=n;i++)
for(int j=;j<n;j++){
int t=i+j;
t%=n;if(!t)t=n;
ans[t]+=B.v[j]*a[i];
}
for(int i=;i<=n;i++)
printf("%.3lf\n",ans[i]);
return ;
}

最新文章

  1. electron 入门小白贴
  2. JavaScript函数的概念
  3. .NET框架体系结构
  4. 自定义圆形控件RoundImageView并认识一下attr.xml
  5. zju(7)ADC操作实验
  6. Vim插件安装
  7. C# 打印异常
  8. 使用 Async 和 Await 的异步编程
  9. 【HTTP】HTTP access control (CORS)
  10. Linux SD/MMC/SDIO驱动分析
  11. 基于basys2驱动LCDQC12864B的verilog设计图片显示
  12. MySQL优化 - 性能分析与查询优化
  13. [译] OpenStack Pike 版本中的 53 个新功能盘点
  14. eval基础,基础用法及解析json
  15. Android 1.7 中不支持 lambda 表达式
  16. 为什么Java的main方法必须是public static void?
  17. 【leetcode-88,21】 合并两个有序数组/链表
  18. 【LeetCode】335. Self Crossing(python)
  19. 167. Two Sum II - Input array is sorted (Array)
  20. 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)

热门文章

  1. Oracle 函数 之 wm_concat()
  2. runtime消息转发机制
  3. oracle数据库删除表时遇见需要解锁问题
  4. 十八、MySQL 排序
  5. MySQL 如何生成日期表
  6. C语言中可变参数的使用
  7. HDU 6228 tree 简单思维树dp
  8. Java文件 ---文件相关操作
  9. 计算时间复杂度&amp;空间复杂度
  10. 手机APP设计网