题目:

Description

有M个球,一开始每个球均有一个初始标号,标号范围为1~N且为整数,标号为i的球有ai个,并保证Σai = M。

每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1;若这个球标号为N,则将其重标号为1。(取出球后并不将其丢弃)

现在你需要求出,经过K次这样的操作后,每个标号的球的期望个数。

题解:

神题一个.

首先我们发现没有办法直接对整体进行dp

所以我们先单独考虑一个球.

我们设\(p[i][j]\)表示一个球在i轮后编号向右移动了\(j\)位

简单理解就是\(pos\)变成了\((pos+1)%n\)

那么我们有: \(p[i][j] = p[i-1][j]*\frac{m-1}{m} + p[i-1][j-1]*\frac{1}{m}\)

那么我们有答案\(ans[i] = \sum_{j=0}^{n-1}a[(i-j+n)%n]*p[k][j]\)

所以只要我们计算出\(p[][]\)即可\(O(n^2)\)统计答案

然后关键就是处理\(p[][]\)

但是我们发现\(k\)大的要死,明摆着让我们写矩乘

但是\(n \leq 1000\)矩阵乘法无法直接出解。

但是我们仔细观察一下我们的转移矩阵,发现这个矩阵居然是一个循环矩阵!

所以我们可以直接用\(O(n^2)\)的复杂度完成循环矩阵的乘法。

所以可以将复杂度降到\(O(n^2logk + nlogn)\)

后面的\(nlongn\)是因为可以用FFT计算卷积实现答案的统计.

但是人懒,直接写的n^2的统计,复杂度同阶.

而且貌似n^2的循环展开比FFT还要快.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 1024;
int a[maxn];
struct Matrix{
double s[maxn];
int n;
void clear(int n){
this->n = n;
memset(s,0,sizeof s);
}
friend Matrix operator * (Matrix a,Matrix b){
Matrix c;c.clear(a.n);
for(int j=0;j<c.n;++j){
for(int k=0;k<c.n;++k){
c.s[j] += a.s[k]*b.s[(j-k+c.n)%c.n];
}
}
return c;
}
}ori,mul;
double anss[maxn];
int main(){
int n,m,k;read(n);read(m);read(k);
for(int i=0;i<n;++i) read(a[i]);
ori.clear(n);
mul.clear(n);
ori.s[0] = 1.0;
mul.s[0] = 1.0*(m-1)/m;
mul.s[1] = 1.0/m;
int p = k;
for(;p;p>>=1,mul=mul*mul) if(p&1) ori = ori*mul;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
anss[i] += a[(i-j+n)%n]*ori.s[j];
}
}
for(int i=0;i<n;++i){
printf("%.3lf\n",anss[i]);
}
return 0;
}

bzoj 2510: 弱题 概率期望dp+循环矩阵的更多相关文章

  1. bzoj 2510: 弱题 循环矩阵

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 61[Submit][Status][Discuss] De ...

  2. [BZOJ 2510]弱题

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 419  Solved: 226[Submit][Status][Discuss] D ...

  3. BZOJ 2510: 弱题( 矩阵快速幂 )

    每进行一次, 编号为x的数对x, 和(x+1)%N都有贡献 用矩阵快速幂, O(N3logK). 注意到是循环矩阵, 可以把矩阵乘法的复杂度降到O(N2). 所以总复杂度就是O(N2logK) --- ...

  4. 【循环矩阵乘优化DP】BZOJ 2510 弱题

    题目大意 有 \(M\) 个球,一开始每个球均有一个初始标号,标号范围为 \(1\) - \(N\) 且为整数,标号为 \(i\) 的球有 \(a_i\) 个,并保证 \(\sum a_i = M\) ...

  5. 【BZOJ2510】弱题 期望DP+循环矩阵乘法

    [BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...

  6. bzoj 2510 弱题 矩阵乘

    看题就像矩阵乘 但是1000的数据无从下手 打表发现每一行的数都是一样的,只不过是错位的,好像叫什么循环矩阵 于是都可以转化为一行的,O(n3)->O(n2)*logk #include< ...

  7. bzoj 4832 抵制克苏恩 概率期望dp

    考试时又翻车了..... 一定要及时调整自己的思路!!! 随从最多有7个,只有三种,所以把每一种随从多开一维 so:f[i][j][k][l]为到第i次攻击前,场上有j个1血,k个2血,l个3血随从的 ...

  8. 【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 196 Description 有M个球,一开始每个球均有一 ...

  9. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

随机推荐

  1. Windows 下Node.js开发环境配置

    第一步:安装VirtualBox(以管理员身份安装) 1.安装完成后,打开VirtualBox,点击“新建”按钮,输入信息,“下一步”(名称可任意) 2.设置内存为1024MB,“下一步”—>“ ...

  2. web.xml配置整理

    虽然是做web开发,但是web中的很多配置有的时候却不是很清楚,只是知道怎么配置,于是就把在网上看到各种关于web.xml的东西整理一下: web.xml中url-pattern的3种写法 1完全匹配 ...

  3. 【BZOJ1007】[HNOI2008]水平可见直线 半平面交

    [BZOJ1007][HNOI2008]水平可见直线 Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见 ...

  4. 一些blog地址总结整理:

    女神 python之路-网络编程初版:https://www.cnblogs.com/Eva-J/articles/8066842.html python之路-网络编程(重点看这个,更细致):http ...

  5. 20179209《Linux内核原理与分析》第十一周作业

    Nmap配合Metasploit进行端口扫描 1.Nmap扫描器基本使用 1.1简介 Nmap(Network Mapper)最早是Linux下的网络扫描嗅探器.其基本功能有三个: 探测一组主机是否在 ...

  6. StackOverflow&&Quora&&More 翻译系列——目录

    启动了一个翻译系列,主要收录个人在伯乐在线上翻译的文章,或者在 StackOverflow.Quora 及其他资讯站上发现的好文,选文比较偏个人喜好.希望能够学习.理解文章的同时提高英语水平,并共享知 ...

  7. 全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/hatmore/article/details/37658167 (一)DocumentType 类型 ...

  8. SSH 占用数据库连接不释放问题

    SSH框架的项目在訪问数据库的时候.訪问完毕后一直占用链接,不释放.导致过了一段时间后,server没挂,就是有訪问数据库的连接是时候.一直卡住 解决的方法:   1.配置spring相应的hiber ...

  9. jQuery 中的 Deferred 和 Promises(转)

    转自:http://www.css88.com/archives/4750/comment-page-1 看前首先了解:Promises/A规范,具体可以看这里,http://www.css88.co ...

  10. 数组元素的删除 【vector】

    7-5 数组元素的删除(5 分) 完成数组元素的移动功能:假设数组有n个元素,输入一个数x,把数组的第x个位置的元素删除了,后面的元素依次前进一个位置. 重复若干次这样的删除,得到最后的结果. 输入格 ...