题意:

给定 n 张排成一堆的的卡片,每一次从堆顶上等概率随机取出 [1~当前卡片数] 个卡片,如果堆顶的卡片是反面朝上,

则将所有取出的卡片翻转,求问期望取出多少个反面朝上的卡片。

解法:

考虑dp,首先有期望的可加性得

$ans = \sum_{i=1}^n{ P(card_i \  is \  reversed \  when \  got) }$

这样考虑求后面的概率。

用 $f(i)$ 表示以 $i$ 为取出的卡片的顶上的卡片的概率。

$f(1) = 1$

$f(i) = \sum{ \frac{f(j)}{n-j+1} }$

这样记$h(i,0), h(i,1)$ 分别表示第 $i$ 张卡片被一张正面朝上的卡消去 和 被一张反面朝上的卡消去的概率。

从而有

$$h(i,0) = \sum_{1 \leq j \leq i, S(j-1) = C}{ f(j) \frac{n-i+1}{n-j+1} }$$

$h(i,1)$ 递推式同理。

对两个式子记一下前缀和,$O(n)$

#include <iostream>
#include <cstdio>
#include <cstring> #define LD double
#define N 1000010 using namespace std; int n;
LD f[N];
char S[N]; int main()
{
freopen("foreign.in", "r", stdin);
freopen("foreign.out", "w", stdout);
while(~scanf("%s",S))
{
n = strlen(S);
f[] = ;
f[] = 1.0 / (LD)n;
for(int i = ;i < n;i++)
f[i+] = f[i] + f[i] / (n-i+);
LD sumC = , sumW = , ans = ;
for(int i = ;i <= n;i++)
{
if(S[i-] == 'C') sumC += f[i] / (n-i+1.0);
else sumW += f[i] / (n-i+1.0);
if(S[i-] == 'C') ans += (n-i+1.0) * sumW;
else ans += (n-i+1.0) * sumC;
}
printf("%.10lf\n", ans);
}
fclose(stdin);
fclose(stdout);
return ;
}

Foreign Postcards的更多相关文章

  1. 2016 ACM-ICPC NEERC F. Foreign Postcards (概率DP)

    2016 ACM-ICPC NEERC F. Foreign Postcards 题意:有一串由C.W组成的字符串,每次截取长度为k(1<=k<=n且k随机)的前缀,如果该前缀首位为W,则 ...

  2. Gym - 101190F Foreign Postcards (期望dp)

    题意:有n张标有“C”或“F”的卡片. 1.随机取前k张(1<=k<=n) 2.若这k张的第一张为“C”,则不翻转,否则,全部翻转这k张. 3.然后处理剩下的n-k张 4.重复步骤1~3直 ...

  3. 【概率dp】【数学期望】Gym - 101190F - Foreign Postcards

    http://blog.csdn.net/DorMOUSENone/article/details/73699630

  4. Constraint6:更新外键约束(Foreign Key Constraint)的引用列

    在SQL Server中,表之间存在引用关系,引用关系通过创建外键约束(Foreign Key Constraint)实现.如果一个Table中的column被其他Table引用,那么该表是参考表,或 ...

  5. MySQL主从复制中断,报“Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217” 错误

    前几天,发现从库挂了,具体报错信息如下: 分析思路 1. 因为我采用的是选择性复制,只针对以下几个库进行复制: card,upay,deal,monitor,collect.所以,不太可能出现对于sa ...

  6. ORA-02266: unique/primary keys in table referenced by enabled foreign keys

    在数据库里面使用TRUNCATE命令截断一个表的数据时,遇到如下错误 SQL >TRUNCATE TABLE ESCMOWNER.SUBX_ITEM ORA-02266: unique/prim ...

  7. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  8. 【MySQL】Create table 以及 foreign key 删表顺序考究。

    1.以下是直接从数据库导出的建表语句. 1 -- ---------------------------- 2 -- Table structure for files 3 -- ---------- ...

  9. MYSQL外键(Foreign Key)的使用

    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): ...

随机推荐

  1. 内核顶层Makefile相关4

    http://www.groad.net/bbs/simple/?f104.html make 的递归执行与 MAKEFLAGS 变量 make 的递归调用是指:在 Makefile 中使用 make ...

  2. 服务管理-Apache

    WEB服务器介绍 web server 有两个意思: 一台负责提供网页的服务器,通过HTTP协议传给客户端(一般是指网页浏览器). 一个提供网页的服务器程序. 常见的WEB服务器 Apache是世界使 ...

  3. 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介

    一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...

  4. Mvc Autofac构造器注入

    新建MVC项目,添加程序集引用 定义接口ILog public interface ILog { string Save(string message); } 类TxtLog实现接口ILog publ ...

  5. Cena使用

    打开cena,在工具-选项中,修改G++和GCC的编译命令.格式:[g++目录]g++.exe %s.cpp -o %s.exe [编译选项]例如以下命令使用刚安装的mingw4.8.1 g++编译, ...

  6. 【BZOJ3728】PA2014Final Zarowki 贪心

    [BZOJ3728]PA2014Final Zarowki Description 有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照 ...

  7. Go Web(一)

    Beego环境搭建和bee工具安装使:http://blog.csdn.net/qq_534019165/article/details/48288133 Go语言beego框架环境搭建:http:/ ...

  8. 九度OJ 1126:打印极值点下标 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4613 解决:1646 题目描述: 在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整 ...

  9. Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)

    Error: Package: mysql-community-server-8.0.12-1.el7.x86_64 (mysql80-community) Requires: libstdc++.s ...

  10. 【WordSearch】Word Search

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...