2016北京集训测试赛(十)Problem A: azelso

Solution
我们把遇到一个旗子或者是遇到一个敌人称为一个事件.
这一题思路的巧妙之处在于我们要用\(f[i]\)表示从\(i\)这个事件一直走到终点这段路程中, \(i\)到\(i + 1\)这段路只被经过一次的概率. 分类讨论:
- \(i + 1\)是一个敌人, 则\(f[i] = f[i + 1] \times p[i + 1]\)
- \(i + 1\)是一个旗子, 则
\]
表示\(i + 1\)到\(i + 2\)这一段只被走一次的概率, 加上走过\(i + 1\)后掉回\(i + 1\), 再往后走, 再掉回\(i + 1\), 一直循环, 一直掉回\(i + 1\), 直到走到终点的概率. 上面的式子用无限和式稍微处理即可化简.
然后我们又发现一段路程的被走过的期望次数等于\(1 / p_i\), 因此就可以方便地统计总共要走的期望距离.
#include <cstdio>
#include <cctype>
namespace Zeonfai
{
inline long long getInt()
{
long long a = 0, sgn = 1; char c;
while(! isdigit(c = getchar())) if(c == '-') sgn *= -1;
while(isdigit(c)) a = a * 10 + c - '0', c = getchar();
return a * sgn;
}
inline char getChar()
{
char c;
while(! isgraph(c = getchar()));
return c;
}
}
const long long MOD = 1e9 + 7, N = 1e5;
inline long long getInverse(long long a)
{
long long res = 1;
for(long long x = MOD - 2; x; a = a * a % MOD, x >>= 1) if(x & 1) res = res * a % MOD;
return res;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("azelso.in", "r", stdin);
freopen("azelso.out", "w", stdout);
#endif
using namespace Zeonfai;
long long len = getInt(), n = getInt();
static long long opt[N + 2], pos[N + 2], E[N + 2], p[N + 2];
for(long long i = 1; i <= n; ++ i)
{
opt[i] = getChar() == 'F' ? 0 : 1;
pos[i] = getInt() % MOD;
long long a = getInt(), b = getInt(); p[i] = a * getInverse(b) % MOD;
}
E[n] = 1;
for(long long i = n - 1; ~ i; -- i) E[i] = opt[i + 1] == 0 ? (E[i + 1] - p[i + 1] * E[i + 1] % MOD + p[i + 1] + MOD) % MOD : E[i + 1] * getInverse(p[i + 1]) % MOD;
long long ans = 0; pos[0] = 0; pos[n + 1] = len;
for(long long i = 0; i <= n; ++ i)
ans = (ans + (pos[i + 1] - pos[i] + MOD) * E[i] % MOD) % MOD;
// ans = (ans + len - pos[n]) % MOD;
printf("%d\n", ans);
}
2016北京集训测试赛(十)Problem A: azelso的更多相关文章
- 2016北京集训测试赛(十六)Problem C: ball
Solution 这是一道好题. 考虑球体的体积是怎么计算的: 我们令\(f_k(r)\)表示\(x\)维单位球的体积, 则 \[ f_k(1) = \int_{-1}^1 f_{k - 1}(\sq ...
- 2016北京集训测试赛(十六)Problem B: river
Solution 这题实际上并不是构造题, 而是一道网络流. 我们考虑题目要求的一条路径应该是什么样子的: 它是一个环, 并且满足每个点有且仅有一条出边, 一条入边, 同时这两条边的权值还必须不一样. ...
- 2016北京集训测试赛(十六)Problem A: 任务安排
Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...
- 2016北京集训测试赛(十四)Problem B: 股神小D
Solution 正解是一个\(\log\)的link-cut tree. 将一条边拆成两个事件, 按照事件排序, link-cut tree维护联通块大小即可. link-cut tree维护子树大 ...
- 2016北京集训测试赛(十四)Problem A: 股神小L
Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...
- 【2016北京集训测试赛(十)】 Azelso (期望DP)
Time Limit: 1000 ms Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- 2016北京集训测试赛(十七)Problem C: 数组
Solution 线段树好题. 我们考虑用last[i]表示\(i\)这个位置的颜色的上一个出现位置. 考虑以一个位置\(R\)为右端点的区间最远能向左延伸到什么位置: \(L = \max_{i \ ...
- 2016北京集训测试赛(十七)Problem B: 银河战舰
Solution 好题, 又是长链剖分2333 考虑怎么统计答案, 我场上的思路是统计以一个点作为结尾的最长上升链, 但这显然是很难处理的. 正解的方法是统计以每个点作为折弯点的最长上升链. 具体的内 ...
随机推荐
- Django之session验证的三种姿势
一.什么是session session是保存在服务端的键值对,Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中. 二.FVB中 ...
- RNNs在股票价格预测的应用
RNNs在股票价格预测的应用 前言 RNN和LSTMs在时态数据上表现特别好,这就是为什么他们在语音识别上是有效的.我们通过前25天的开高收低价格,去预测下一时刻的前收盘价.每个时间序列通过一个高斯分 ...
- 申请社交平台appkey详细教程
申请社交平台appkey详细教程 大部分app都需要实现分享到微信.微博等社交平台的功能,但是在各个平台上申请appkey是一件很繁琐的事情.现在来分享一个申请社交平台appkey详细教程,在开发过程 ...
- IOS开发学习笔记026-UITableView的使用
UITableView的简单使用过程 简单介绍 两种样式 UITableViewStylePlain UITableViewStyleGrouped 数据显示需要设置数据源,数据源是符合遵守协议 &l ...
- junit4 assert类中的assert方法总结
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...
- Selenium 中 高亮元素
//高亮元素 WebElement element = driver.findElement(By.cssSelector(".table1 .btn-public label" ...
- manjaro无声音
解决方法:https://forum.manjaro.org/t/no-sound-solved/3517 LOL i feel like such a noob. Fixed my problem ...
- LeetCode——Problem3:Longest Substring Without Repeating Characters
哎哟我天啊.这道题快折磨死我了.刚开始连题都没看明白,就是不知道substring是什么意思.研究了好长时间才看出来的. 光辉历史呀...菜死了 1.题目 Given a string, find t ...
- Android之操作相册
获取手机中的图片的绝对路径并且区分出每个文件夹下的路径: 存放图片绝对路径的文件夹的名字和存放绝对路径的List 实体类如下: import java.util.ArrayList; import j ...
- Vim插件YCM的安装
YouCompleteMe(YCM)是一款非常好用的Vim插件,但是很多人安装的时候会出问题(尤其是涉及到C和C++的补全),我安装的时候也遇到了问题,现在解决了,给大家参考: Step1: 通过Vu ...