【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)
2510: 弱题
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 374 Solved: 196Description
有M个球,一开始每个球均有一个初始标号,标号范围为1~N且为整数,标号为i的球有ai个,并保证Σai = M。每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1;若这个球标号为N,则将其重标号为1。(取出球后并不将其丢弃)现在你需要求出,经过K次这样的操作后,每个标号的球的期望个数。Input
第1行包含三个正整数N,M,K,表示了标号与球的个数以及操作次数。第2行包含N个非负整数ai,表示初始标号为i的球有ai个。Output
应包含N行,第i行为标号为i的球的期望个数,四舍五入保留3位小数。Sample Input
2 3 2
3 0Sample Output
1.667
1.333HINT
【样例说明】
第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。
Source
【分析】
综合题表里面目测的一道【稀少的】可做题。。
显然,矩阵乘法嘛。。$f[i][j]=f[i-1][j]*\dfrac{m-1}{m}+f[i-1][j-1]*\dfrac{1}{m}$
然后一个厉害的东西就是A,B是循环矩阵(就是矩阵的下一行是上一行循环右移一位得到的),那么A*B=C的C也是循环矩阵。
只需求第一行就可以求出整个C。
所以是$n^2 log$
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 1010 int a[Maxn];
int n,m,k; struct node
{
double w[Maxn][Maxn];
}t[]; void mul(int x,int y,int z)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) t[].w[i][j]=;
for(int k=;k<=n;k++)
for(int j=;j<=n;j++)
t[].w[][j]+=t[y].w[][k]*t[z].w[k][j];
for(int j=;j<=n;j++) t[x].w[][j]=t[].w[][j];
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
t[x].w[i][j]=t[x].w[i-][j-==?n:j-];
}
} void qpow(int b)
{
for(int i=;i<=n;i++) for(int j=;j<=n;j++) t[].w[i][j]=;
for(int i=;i<=n;i++) t[].w[i][i]=1.0;
while(b)
{
if(b&) mul(,,);
mul(,,);
b>>=;
}
} int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++) t[].w[i][j]=;
t[].w[i][i]=1.0-1.0/m;
t[].w[i][i-==?n:i-]=1.0/m;
}
qpow(k);
for(int i=;i<=n;i++)
{
double ans=;
for(int j=;j<=n;j++)
{
ans+=a[j]*t[].w[i][j];
}
printf("%.3lf\n",ans);
}
return ;
}
2017-04-10 20:47:14
【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)的更多相关文章
- 【BZOJ2510】弱题 期望DP+循环矩阵乘法
[BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...
- bzoj 2510: 弱题 循环矩阵
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 61[Submit][Status][Discuss] De ...
- BZOJ 2510: 弱题( 矩阵快速幂 )
每进行一次, 编号为x的数对x, 和(x+1)%N都有贡献 用矩阵快速幂, O(N3logK). 注意到是循环矩阵, 可以把矩阵乘法的复杂度降到O(N2). 所以总复杂度就是O(N2logK) --- ...
- [BZOJ 2510]弱题
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 419 Solved: 226[Submit][Status][Discuss] D ...
- 「BZOJ2510」弱题(矩阵乘法,降维)
有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < ...
- Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)
1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小明最近在为线性代数而头疼, ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
- 「BZOJ2510」弱题
「BZOJ2510」弱题 这题的dp式子应该挺好写的,我是不会告诉你我开始写错了的,设f[i][j]为操作前i次,取到j小球的期望个数(第一维这么大显然不可做),那么 f[i][j]=f[i-1][j ...
- BZOJ 4031 HEOI2015 小Z的房间 基尔霍夫矩阵+行列式+高斯消元 (附带行列式小结)
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可 ...
随机推荐
- MySQL异常总结
1.Packets larger than max_allowed_packet are not allowed MySQL的一个系统参数:max_allowed_packet,其默认值为104857 ...
- void指针和NULL指针
Void指针和NULL指针 Void指针: Void指针我们称之为通用指针,就是可以指向任意类型的数据.也就是说,任何类型的指针都可以赋值给Void指针. 举例: #include<stdio. ...
- javaScript 中的一些日常用法总结
从今天开始把开发中常用到的js语法 一一记录下来 方便以后复习回顾用: 1:对字符串进行替换 replace 以及 replaceAll replace : var begin_date =begin ...
- tensorflow.nn.bidirectional_dynamic_rnn()函数的用法
在分析Attention-over-attention源码过程中,对于tensorflow.nn.bidirectional_dynamic_rnn()函数的总结: 首先来看一下,函数: def bi ...
- Tinyos Makerules解读
Makerules 文件解读 位于/opt/tinyos-2.1.2/support/make #-*-Makefile-*- vim:syntax=make #$Id: Makerules,v 1. ...
- 013 GC机制
本文转自:https://www.cnblogs.com/shudonghe/p/3457990.html 最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面 ...
- Java的BIO,NIO,AIO
Java中的IO操作可谓常见.在Java的IO体系中,常有些名词容易让人困惑不解.为此,先通俗地介绍下这些名词. 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同 ...
- SSL与HTTPS,HTTP有什么联系
有人问:http和https有什么区别? HTTP,全称"Hyper Text Transfer Protocol",是从浏览器访问网站时使用的默认协议.由于浏览器到网站之间的数据 ...
- ie6 css 返回顶部图标固定在浏览器右下角
比较常用记录一下. #e_float{ _position:absolute; _bottom:auto; _right:50%; _margin-right:-536px; _top:express ...
- 【WPF】自定义控件之远程图片浏览
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...