[CF908D]New Year and Arbitrary Arrangement
题面在这里
题意
给定三个数\(k,pa,pb\),每次有\(\frac{pa}{pa+pb}\)的概率往后面添加一个'\(a\)',每次有\(\frac{pb}{pa+pb}\)的概率往后面添加一个'\(b\)'当出现了\(k\)个形如'\(ab\)'的子序列(不用连续)时停止。求最后的形如'\(ab\)'的子序列个数的期望。答案对\(1e9+7\)取模。
\(k\leq 1000\)
sol
一看到\(k\leq 1000\)马上想到\(f[i][j]\)表示已经有\(i\)个\(a\),目前'\(ab\)'的子序列的个数为\(j\)的期望
转移:$$f[i][j]=f[i][j]+\frac{pa}{pa+pb}*f[i+1][j]+\frac{pb}{pa+pb}f[i][i+j]$$
但是需要考虑\(bbb...bbab\)(前面无限个'b')和\(abbaaa...\)(后面无限个'a')的情况
首先前面的'\(b\)'不管有多少都不需要考虑
然后考虑的就是后面无限个'a'的情况
我们注意到,如果状态\(f[i][j]\)中的\(i+j\geq k\),那么只需要再加上一个'\(b\)'统计就会结束
那么\(f[i][j]\)的求解实际上就是在解一个无穷级数:
\]
可以化简成
\]
那么对于\(i+j\geq k\)的情况直接算出答案,其余的情况递推求解就好
代码
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<cstring>
#include<complex>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define mp make_pair
#define pb push_back
#define RG register
#define il inline
using namespace std;
typedef unsigned long long ull;
typedef vector<int>VI;
typedef long long ll;
typedef double dd;
const dd eps=1e-10;
const int mod=1e9+7;
const int N=1010;
const int M=90000;
il ll read(){
RG ll data=0,w=1;RG char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
return data*w;
}
il void file(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
}
il ll poww(ll a,ll b){RG ll ret=1;for(a%=mod;b;b>>=1,a=a*a%mod)
if(b&1)ret=ret*a%mod;return ret;}
int k,pa,pb,rev,revb,f[N][N];
il int search(int x,int y){
if(f[x][y])return f[x][y];
if(x+y>=k)return f[x][y]=(x+y+1ll*pa*revb%mod)%mod;
return f[x][y]=(1ll*pa*rev%mod*search(x+1,y)%mod+1ll*pb*rev%mod*search(x,x+y)%mod)%mod;
}
int main()
{
k=read();pa=read();pb=read();
rev=poww(pa+pb,mod-2);revb=poww(pb,mod-2);
printf("%d\n",search(1,0));
return 0;
}
[CF908D]New Year and Arbitrary Arrangement的更多相关文章
- CF908D New Year and Arbitrary Arrangement(期望Dp+数学)
题目大意:给你一个空字符串,你有\(\frac{pa}{pa+pb}\)的概率往字符串最后面加个\(a\),\(\frac{pb}{pa+pb}\)的概率往字符串最后面加个\(b\),当子序列\(ab ...
- CF908D New Year and Arbitrary Arrangement 期望、DP
题目传送门 题意:给出正整数$pa,pb,k$,最开始你有一个空串,每一次你有$\frac{pa}{pa + pb}$的概率向串最后放一个$a$,有$\frac{pb}{pa + pb}$的概率向串最 ...
- $CF908D\ New\ Year\ and\ Arbitrary\ Arrangement$ 期望$dp$
正解:期望$dp$ 解题报告: 传送门$QwQ$ 阿关于题目里那个形如$ab$的子序列我说下,,,我我我之前$get$了好久$QAQ$.这里子序列的个数的定义是这样儿的,举个$eg$,$aabb$,就 ...
- CF908D New Year and Arbitrary Arrangement 题解
\(0.\) 前言 有一天 \(Au\) 爷讲期望都见到了此题,通过写题解来加深理解. \(1.\) 题意 将初始为空的序列的末尾给定概率添加 \(a\) 或 \(b\),当至少有 \(k\) 对 \ ...
- Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)
题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾 ...
- 【CodeForces】908 D. New Year and Arbitrary Arrangement
[题目]Good Bye 2017 D. New Year and Arbitrary Arrangement [题意]给定正整数k,pa,pb,初始有空字符串,每次有pa/(pa+pb)的可能在字符 ...
- [CodeForces]908D New Year and Arbitrary Arrangement
设状态f[i][j]表示有i个a,j个ab的期望 发现如果i+j>=k的话就再来一个b就行了. #include <iostream> #include <cstdio> ...
- Codeforces New Year and Arbitrary Arrangement
New Year and Arbitrary Arrangement time limit per test2 seconds You are given three integers k, pa a ...
- CF908D Arbitrary Arrangement
题目大意: 给定三个数\(k\) , \(p_a\) , \(p_b\) 每次有\(\frac{p_a}{p_a+p_b}\)的概率往后面添加一个'a' 每次有\(\frac{p_b}{p_a+p_b ...
随机推荐
- putty,xshell以及密钥认证:linux学习第二篇
1. Putty下载 官网:https://www.chiark.greenend.org 下载putty的zip包 2. Putty使用 2000为可查看的文件行数,建议设置为2000 ...
- dnspython模块安装
wget http://www.dnspython.org/kits/1.12.0/dnspython-1.12.0.tar.gz tar -zxvf dnspython-1.12.0.tar.gz ...
- Redis 实践1- redis介绍和安装
redis是一个key-value存储系统,官方站点 http://redis.io 和memcached类似,但支持数据持久化 支持更多value类型,除了和string外,还支持hash.li ...
- 【netty这点事儿】ByteBuf 的使用模式
堆缓冲区 最常用的 ByteBuf 模式是将数据存储在 JVM 的堆空间中. 这种模式被称为支撑数组(backing array), 它能在没有使用池化的情况下提供快速的分配和释放. 直接缓冲区 直接 ...
- 关于FFMPeg-PHP你必须要知道的
#PHP FFmpeg []( ...
- WAMP环境搭建过程中遇到的种种问题
1,可以选择已经打包好的继承安装包,通常包含apache,mysql,PHP,phpMyadmin.如appserv和wamp. 2,自己分别安装. 第一步:安装mysql,注意设置root对应的密码 ...
- NTP 时间同步协议
http://www.faqs.org/rfcs/rfc1305.html port:123
- mysql 导出每张表中的100条数据..............
windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...
- CEPH s3 java sdk PUT对象并在同一个PUT请求中同时设置ACL为 Public
java: http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/acl-using-java-sdk.html tring bucketName ...
- 重温.NET下Assembly的加载过程
最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详 ...