Bzoj 4204: 取球游戏
来源:互联网 发布:linux创建db2数据库 编辑:程序博客网 时间:2024/06/05 02:27
传送门: http://www.lydsy.com/JudgeOnline/problem.php?id=4204
题意简述:
有
每次操作等概率取出一个球(即取出每个球的概率均为
现在你需要求出,经过
数据范围:
题解: 首先操作
是一个循环矩阵,因为循环矩阵的积还是循环矩阵,所以只要存一行即可保留整个矩阵的信息,那么矩阵乘法复杂度就只有
#include<bits/stdc++.h>const int N = 1005;struct matrix{double a[N];} x;int n, m, k, a[N];double t[N * 2];matrix operator * (const matrix &a, const matrix &b) { matrix c; memset(&c, 0, sizeof(c)); for (int i = 1; i <= n; i++) t[n + 1 - i] = t[n + n + 1 - i] = b.a[i]; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) c.a[i] += a.a[j] * t[n - i + j]; return c;}matrix pow(matrix x, int k) { matrix ret; memset(&ret, 0, sizeof(ret)); ret.a[1] = 1; for (; k; k >>= 1, x = x * x) if (k & 1) ret = ret * x; return ret;}int main() { scanf("%d%d%d", &n, &m, &k); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); x.a[1] = (double)(m - 1) / m; x.a[n] = 1.0 / m; x = pow(x, k); for (int i = 1; i <= n; i++) t[i] = t[n + i] = x.a[i]; for (int i = 1; i <= n; i++) { double ans = 0; for (int j = 1; j <= n; j++) ans += a[j] * t[n - i + j + 1]; printf("%.3f\n", ans); } return 0;}
阅读全文
0 0
- bzoj-4204 取球游戏
- Bzoj 4204: 取球游戏
- BZOJ 4204 取球游戏 循环矩阵优化期望递推
- 【BZOJ 1874】 [BeiJing2009 WinterCamp]取石子游戏
- 【BZOJ 1978】 [BeiJing2010]取数游戏 game
- bzoj 1874: [BeiJing2009 WinterCamp]取石子游戏
- 【BZOJ】2000: [Hnoi2010]stone 取石头游戏
- bzoj 1874 取石子游戏 博弈论
- bzoj 1874 [BeiJing2009 WinterCamp]取石子游戏
- BZOJ 1978: [BeiJing2010]取数游戏 game
- 取球游戏
- 蓝桥杯 取球游戏
- 1405 取球游戏
- 取球游戏
- 取球游戏
- 取球游戏
- 取球游戏
- 取球游戏
- iOS 代理kvc和kvo
- java类执行顺序
- Shiro加密
- ubuntu 安装python gym
- 第七期 使用Qemu+Buildroot+Eclipse打造一个优雅的开发环境 《虚拟机就是开发板》
- Bzoj 4204: 取球游戏
- 获取元素的三种DOM方法
- 杭电 2049
- crond服务和crontab命令
- Java反射
- Golang教程:(四)类型
- LintCode python 小白1
- 以r+方式fopen文件,写不进去内容
- camera sensor的分类及区别