Tsinsen-A1490 osu! 【数学期望】
问题描述
一张osu!的地图是由若干个“音”排列而成的。在本题中,对于每个音我们只需要考虑成功点击和错过(miss)这两种情况。对于一张osu!地图,玩家的完成情况可以用一个01串表示(0代表miss,1代表成功)。在本题中,使用如下计分规则:将玩家完成一张地图的01串中所有的0删去,则这个串可能会断裂成若干段连续的1。对于一段长度为L的1(L≥1),你的总分会增加L^2+L+1。例如:一张地图有10个音,某玩家完成情况为1011101110,则删除所有0后得到的是“1”“111”和“111”。因此这个玩家的得分为(1+1+1)+(9+3+1)+(9+3+1)=29。
ACMonster要给Sandytea出一张osu!的地图。在一张图中,不同音对于Sandytea而言难度可能是不同的。我们定义一个音的难度系数为Sandytea成功完成这个音的概率,因此这个难度系数是介于0和1之间的。
现在ACMonster写下了一个包含N个音的序列,但是他不想直接把这个序列做成地图,而是选择其中的某个片段。设S(X,Y)代表序列上第X个音到第Y个音构成的序列,ACMonster想知道如果把S(X,Y)对应的序列做成地图,Sandytea的期望得分是多少。有时ACMonster会觉得某个音的难度系数不太合理,因此要进行修改。请你想办法处理ACMonster的修改,并回答他提出的问题。
第二行至第(N+1)行每行包含一个实数,第i行的实数表示第(i-1)个音的难度系数。
第(N+2)行至第(N+M+1)行每行包含三个数Type,X和Y。
如果Type=0,代表ACMonster询问S(X,Y)的期望得分,保证X和Y为整数,1≤X≤Y≤N。
如果Type=1,代表ACMonster要把第X个音的难度系数修改为Y,保证X为整数,1≤X≤N,0≤Y≤1。
0.5
0.5
0 1 2
1 1 0
0 1 2
1.50
对于第二次询问,00,01这两种情况出现的概率均为1/2,得分分别为0,3。因此期望得分为(0+3)/2=1.50。
60%的数据满足N,M≤50000;
100%的数据满足N,M≤500000。
#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define mp make_pair
#define pb push_back
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second
using namespace std;
typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//******************************* const int maxn = ; struct node {
double p;
double a21, a22, a31, a32;
double mul1;
node() {}
node(double _p, double _a21, double _a22, double _a31, double _a32, double _mul1) :
p(_p), a21(_a21), a22(_a22), a31(_a31), a32(_a32), mul1(_mul1) {} }; double ans0, ans1, ans3[]; /* the matrix
{sum[i - 1], E[i - 1], 1} * {1 , 0 , 0} = {sum[i], E[i], 1}
{2pi, pi, 0}
{pi , pi, 1}
*/ double pi[maxn]; struct Seg_Tree {
node T[maxn << ]; void Push_up(int o) {
T[o].p = T[o << ].p + T[o << | ].p, T[o].mul1 = T[o << ].mul1 + T[o << | ].mul1;
T[o].a21 = T[o << ].a21 + T[o << ].a22 * T[o << | ].a21;
T[o].a22 = T[o << ].a22 * T[o << | ].a22;
T[o].a31 = T[o << ].a31 + T[o << ].a32 * T[o << | ].a21 + T[o << | ].a31;
T[o].a32 = T[o << ].a32 * T[o << | ].a22 + T[o << | ].a32;
} void update(int o, int l, int r, int x, double p) {
if (l == r) {
T[o] = node(p, * p, p, p, p, ( - pi[l - ]) * p);
return;
}
int mid = l + r >> ;
if (x > mid) update(o << | , mid + , r, x, p);
else update(o << , l, mid, x, p);
Push_up(o);
} void query(int o, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
ans1 += T[o].p;
ans0 += T[o].mul1;
ans3[] = ans3[] + ans3[] * T[o].a21 + T[o].a31;
ans3[] = ans3[] * T[o].a22 + T[o].a32;
return;
}
int mid = l + r >> ;
if (ql <= mid) query(o << , l, mid, ql, qr);
if (qr > mid) query(o << | , mid + , r, ql, qr);
}
} T; int main() {
int n, m;
scanf("%d%d", &n, &m);
rep(i, , n) scanf("%lf", &pi[i]), T.update(, , n, i, pi[i]);
while (m--) {
int op;
scanf("%d", &op);
if (!op) {
int x, y; scanf("%d%d", &x, &y);
ans1 = , ans0 = , ans3[] = ans3[] = ;
T.query(, , n, x, y);
printf("%.2lf\n", ans1 + ans0 + pi[x - ] * pi[x] + ans3[]);
}
else {
double w; int x;
scanf("%d%lf", &x, &w);
pi[x] = w, T.update(, , n, x, w);
if (x != n) T.update(, , n, x + , pi[x + ]);
}
}
return ;
}
Tsinsen-A1490 osu! 【数学期望】的更多相关文章
- 【整理】简单的数学期望和概率DP
数学期望 P=Σ每一种状态*对应的概率. 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc.在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么 ...
- [BZOJ 3143][HNOI2013]游走(数学期望)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3143 分析: 易得如果知道了每条边经过的数学期望,那就可以贪心着按每条边的期望的大小赋 ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
- 数学期望和概率DP题目泛做(为了对应AD的课件)
题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...
- [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...
- bzoj-3450 Easy概率DP 【数学期望】
Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a ...
- 【BZOJ2134】单位错选(数学期望,动态规划)
[BZOJ2134]单位错选(数学期望,动态规划) 题面 BZOJ 题解 单独考虑相邻的两道题目的概率就好了 没了呀.. #include<iostream> #include<cs ...
- 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)
[BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include< ...
- 【Luogu1291】百事世界杯之旅(动态规划,数学期望)
[Luogu1291]百事世界杯之旅(动态规划,数学期望) 题面 洛谷 题解 设\(f[i]\)表示已经集齐了\(i\)个名字的期望 现在有两种方法: 先说我自己的: \[f[i]=f[i-1]+1+ ...
- 【BZOJ4872】分手是祝愿(动态规划,数学期望)
[BZOJ4872]分手是祝愿(动态规划,数学期望) 题面 BZOJ 题解 对于一个状态,如何求解当前的最短步数? 从大到小枚举,每次把最大的没有关掉的灯关掉 暴力枚举因数关就好 假设我们知道了当前至 ...
随机推荐
- webstrom自定义代码块的设置方法
webstrom里面的自定义代码块叫做活动模版 在文件 -> 设置 -> 编辑器 -> 活动模版可以打开 里面的$var$ 代表一个变量 两个相同的$var$在不全后可以同时修改, ...
- Sublime Text 3 安装使用
机器比较老,运行Pycharm等卡死,所以选择Sublime,非常流畅. 安装 版本3103 官网下载安装 注册码: —– BEGIN LICENSE —–Nicolas HennionSingle ...
- IIS Express允许外部访问(外部调试)
Visual Studio配合IIS Express为Web开发提供了强劲的调试功能,本文介绍IIS Express如何在调试模式下让局域网的其他设备进行访问,以便进行测试. 1.打开IIS Expr ...
- PHP中require()文件包含的正确用法
以前看一些PHP框架源码的时候,很奇怪在文件包含的时候,会用dirname(__FILE__)来拼凑文件路 径,不知道这样做有什么好处,后来终于发现了其中的缘由. 我们来看一个简单的例子: 有a,b, ...
- emacs format
格式化源码是很常见的需求,emacs有个indent-region函数用于格式化选定的代码,前提是你处在某个非text mode下,如c-mode或者java-mode之类.如果要格式化整个文件,你需 ...
- Ubuntu系统如何卸载并安装新版本的jdk(permission denied问题)
1.如果是自带的openjdk运行下面可以删除: sudo apt-get purge openjdk* 但是这种情况又不一定成功,有时候运行java -version发现还是可以运行的.证明删除不成 ...
- Hibernate中用纯SQL查询,并通过hibernate分页返回List<对象>
@SuppressWarnings("unchecked") public List<Article> getPageQueryList(final int pageN ...
- listView上拉刷新下拉加载
xlistview_header.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLa ...
- Mac 下面,添加android adb命令(一般环境变量的添加方法)
1. 在 用户目录下 ~/.bash_profile vim ~/.bash_profile 2.加入我们需要添加的环境变量,这里是 添加 android platform-tools 和 ...
- android bitmap compress(图片压缩)
android bitmap compress android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片. 有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么 ...