算数学期望,每个人都可以分开来考虑。Xi表示第i个人跑到另外一边的次数。

Xi服从二项分布。概率的和是个二项式,(p+1-p)^T,把二项式展开,p的偶次项是留在原来那一边的概率。

可以用((a+b)^T+(a-b)^T)/2来算出偶次项之和。

也可以用矩阵快速幂。矩阵构造如下

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
//#include<bits/stdc++.h>
using namespace std; typedef double MType;
const int maxn = 1e5+; struct Person
{
double p;
char side;
int T;
void IN(){
scanf("%d %c %lf",&T,&side,&p);
}
void cal(MType &lft, MType &rgh){
double keep = (+pow(-*p,T))/;
if(side == 'L') lft = keep, rgh = -keep;
else lft = -keep, rgh = keep;
}
}P; //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int N; scanf("%d",&N);
MType L = , R = , ans = ;
for(int i = ; i < N; i++){
P.IN();
MType l,r;
P.cal(l,r);
ans += L*l + R*r;
L = r;
R = l;
}
printf("%.12lf",ans);
return ;
}

快速幂

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
//#include<bits/stdc++.h>
using namespace std; const int MSIZE = , n = ;
typedef double MType;
struct Matrix
{
MType dat[MSIZE][MSIZE];
MType *operator [](int x){ return dat[x]; }
Matrix operator * (Matrix& B) {
Matrix re;
for(int i = ; i < n; i++){
for(int j = ; j < n; j++){
re[i][j] = ;
for(int k = ; k < n; k++){
re[i][j] += dat[i][k]*B[k][j];
}
}
}
return re;
}
Matrix operator ^ (int q){
Matrix Re, A = *this;
for(int i = ; i < n; i++){
for(int j = ; j < n; j++){
Re[i][j] = i == j?:;
}
}
while(q){
if(q&){
Re = Re * A;
}
A = A * A;
q >>= ;
}
return Re;
}
}; const int maxn = 1e5+;
struct Person
{
double p;
char side;
int T;
void IN(){
scanf("%d %c %lf",&T,&side,&p);
}
void cal(MType &lft, MType &rgh){
Matrix C;
C[][] = C[][] = -p;
C[][] = C[][] = p;
C = C^T;
if(side == 'L') lft = C[][], rgh = C[][];
else lft = C[][], rgh = C[][];
}
}P[maxn]; //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int N; scanf("%d",&N);
for(int i = ; i < N; i++){
P[i].IN();
}
//sort(P,P+N);
MType L = , R = , ans = ;
for(int i = ; i < N; i++){
MType l,r;
P[i].cal(l,r);
ans += L*l + R*r;
L = r;
R = l;
}
printf("%.12lf",ans);
return ;
}

codeforce Gym 100425E The Street Escalator(期望,线性递推)的更多相关文章

  1. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

  2. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  3. 【Luogu4723】线性递推(常系数齐次线性递推)

    [Luogu4723]线性递推(常系数齐次线性递推) 题面 洛谷 题解 板子题QwQ,注意多项式除法那里每个多项式的系数,调了一天. #include<iostream> #include ...

  4. [NOI2017]泳池——概率DP+线性递推

    [NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...

  5. 【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)

    这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k ...

  6. [JZOJ6088] [BZOJ5376] [loj #2463]【2018集训队互测Day 1】完美的旅行【线性递推】【多项式】【FWT】

    Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记 ...

  7. HDU - 6172:Array Challenge (BM线性递推)

    题意:给出,三个函数,h,b,a,然后T次询问,每次给出n,求sqrt(an); 思路:不会推,但是感觉a应该是线性的,这个时候我们就可以用BM线性递推,自己求出前几项,然后放到模板里,就可以求了. ...

  8. POJ 2478 线性递推欧拉函数

    题意: 求sigma phi(n) 思路: 线性递推欧拉函数 (维护前缀和) //By SiriusRen #include <cstdio> using namespace std; # ...

  9. CH定理与线性递推

    才发觉自己数学差的要死,而且脑子有点浑浑噩噩的,学了一个晚上才学会 如果说的有什么不对的可以在下面嘲讽曲明 以下无特殊说明时,默认方阵定义在实数域上,用\(|A|\)表示\(A\)的行列式 特征值与特 ...

随机推荐

  1. Python中print()函数不换行的方法

    一.让print()函数不换行 在Python中,print()函数默认是换行的.但是,在很多情况下,我们需要不换行的输出(比如在算法竞赛中).那么,在Python中如何做到这一点呢? 其实很简单.只 ...

  2. js源码 模仿 jquery的ajax的获取数据(get,post )的请求封装

    function ajax(obj){ // 默认参数 var defaults = { type : 'get', data : {}, url : '#', dataType : 'text', ...

  3. 洛谷P3870 [TJOI2009]开关

    题目描述 现有\(N(2 ≤ N ≤ 100000)\)盏灯排成一排,从左到右依次编号为:\(1,2,......,N\).然后依次执行\(M(1 ≤ M ≤ 100000)\)项操作,操作分为两种: ...

  4. PIL基础操作

    PIL基础操作 新建图片 from PIL import Image # 通常使用RGB模式就可以了 new_img = Image.new('RGB', (100, 100), 'red') new ...

  5. spring定时任务的集中实现

    转载博主:感谢博主 http://gong1208.iteye.com/blog/1773177 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前 ...

  6. asp.net5中程序根目录的获取

    最近在写一个asp.net5的应用,其中要实现的一个功能是生成一个文件,并且存储到应用程序根目录(这里指project.json所在的文件夹)下的export文件夹下.生成文件内容什么的都做好了,忽然 ...

  7. ORACLE比较两个数据库的表结构

    create table ESPACE_TABLE( TABLE_NAME VARCHAR2(100) not null) create table ESPACE_COLUMN( TABLE_NAME ...

  8. 三、css 和 js 的装载与执行

    一个网站在浏览器端是如何渲染的? 一.html 页面加载渲染的过程. 请求回来最先应该是HTML,从一个字节流转换成字符流,浏览器拿到字符流,然后浏览器端进行相应的词法分析成相应的token,然后不断 ...

  9. html的语法 3

    <html> <head> <title>这是第一节课网页标题</title> <!--meta charset="UTF-8" ...

  10. Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...