osu

BZOJ 4318: OSU!

僤鯓⒐⒋嵵緔 提交于 2020-02-20 13:52:25
同 BZOJ3450 \((x+1)^3-x^3 = 3x^2+3x+1\) 同时维护期望长度的平方,期望长度即可 #include <bits/stdc++.h> #define pb push_back #define fi first #define se second #define pii pair<int, int> #define lp p << 1 #define rp p << 1 | 1 #define mid ((l + r) >> 1) #define ll long long #define db double #define rep(i,a,b) for(int i=a;i<b;i++) #define per(i,a,b) for(int i=b-1;i>=a;i--) #define Edg int cnt=1,head[N],to[N*2],ne[N*2];void addd(int u,int v){to[++cnt]=v;ne[cnt]=head[u];head[u]=cnt;}void add(int u,int v){addd(u,v);addd(v,u);} #define Edgc int cnt=1,head[N],to[N*2],ne[N*2],c[N*2];void addd(int u,int v,int w){to[++cnt

CF235B Let\'s Play Osu!

早过忘川 提交于 2020-01-21 10:06:34
传送门 题目大意 求出总得分的期望值。 思路 还没有学习数学期望的 小朋友 赶紧去学一下数学期望,这里只提供公式: $E\left ( x \right )=\sum_{k=1}^{\infty }x_{k}p_{k}$ 其中$x_{k}$表示对应的值,$p_{k}$表示对应的概率。 从题意中很容易看出只有 O 才会对答案做出贡献,设之前连续 O 的长度为 x ,则每次多出一个 O 造成的贡献就是$\left ( x+1 \right )^{2}-x^{2}=2*x+1$,因此我们可以用两个数组,一个是$l_{i}$,表示线性期望,另一个是$ans_{i}$,表示到 i 的期望得分,很容易得到 $l_{i}=\left(l_{i-1}+1\right)*p$ $ans_{i}=ans_{i-1}+\left(2*l_{i-1}+1 \right )*p$ 这里显然可以空间优化,这里不多说明。 AC代码 #include <cstdio> #define RI register int using namespace std; template <class T> inline void read(T &x) { T f = 1; x = 0; char c = getchar(); while(c > '9' || c < '0') { if(c == '-') f = -f; c

CF235B Let\'s Play Osu!

↘锁芯ラ 提交于 2020-01-20 23:51:16
传送门 题目大意 求出总得分的期望值。 思路 如果不知道期望的小朋友,赶紧去学一下期望,只给出求期望的公式: 表示取值, 表示概率。 从题意中,很明显看出只有O才会对答案做出贡献。 因为 ,所以每次多一个O就会多出 的贡献。 我们设 表示线性期望, 表示答案,得到 , 则 。 AC代码 #include <cstdio> #define RI register int using namespace std; template <class T> inline void read(T &x) { T f = 1; x = 0; char c = getchar(); while(c > '9' || c < '0') { if(c == '-') f = -f; c = getchar(); } while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); } x *= f; } int n; double l, ans, p; int main() { read(n); for(RI i = 1; i <= n; i++) { scanf("%lf", &p); ans += (l * 2 + 1) * p; l = (l + 1) * p; } printf("%lf\n", ans); return 0;

OSU Micro-Benchmarks

我只是一个虾纸丫 提交于 2019-12-12 13:35:29
OSU Micro-Benchmarks 编译&安装 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中、居左、居右 SmartyPants 创建一个自定义列表 如何创建一个注脚 注释也是必不可少的 KaTeX数学公式 新的甘特图功能,丰富你的文章 UML 图表 FLowchart流程图 导出与导入 导出 导入 编译&安装 ./configure CC=/path/to/mpicc CXX=/path/to/mpicxx make make install 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的 KaTeX数学公式 语法; 增加了支持 甘特图的mermaid语法 1 功能

[BZOJ4318] OSU!

匿名 (未验证) 提交于 2019-12-02 23:05:13
题目链接 首先根据题设直接设期望: $ E(G(x))$ 表示到 x 的期望得分. 因为: \[ E(x + \Delta) = E(x) + E(\Delta) \] 并且期望的本质实际上是积分, 所以我们只要计算每一个点对应的增量 \(\Delta\) 就可以计算当前的期望值. 发现 \(E(x ^ 3)\) 的增量为 \(3E(x ^ 2) + 3E(x) + 1\) \(E(x ^ 2)\) 的增量为 \(2E(x) + 1\) 然后直接dp计算即可. Code #include<bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = (a), i##_end_ = (b); i <= i##_end_; ++i) #define drep(i, a, b) for(int i = (a), i##_end_ = (b); i >= i##_end_; --i) #define clar(a, b) memset((a), (b), sizeof(a)) #define debug(...) fprintf(stderr, __VA_ARGS__) typedef long long LL; typedef long double LD; int read() { char ch =

【题解】Luogu Osu!三题 期望

做~自己de王妃 提交于 2019-12-02 19:36:55
打开某谷,搜索osu Luogu P1654 Luogu CF235B Luogu P1365 先%本机房的真·Osu!神仙 STO superminivan ORZ 三道题都差不多,就当三倍经验了 P1365 题解 大力推式子 设$f[i]$表示以$i$结尾的期望得分,$len$为期望连续的$o$的个数 分类讨论: ①当前字母为$o$时,$f[i]=f[i-1]+((len+1)^2-len^2)$ 此时$len+1$ 化简 $=>$ $f[i]=f[i-1]+2*len+1$ ②当前字母为$x$时,$f[i]=f[i-1]$ 此时$len=0$ ③当前字母为?时,为$(①+②)/2$ 也就是 $f[i]=f[i-1]+len+0.5$ 整理变成$f[i]=f[i-1]+(2*len+1)*p[i]$ 其中$p[i]$就是i位置出现o的期望 $o p[i]=1$ $x p[i]=0$ $? p[i]=0.5$ 再看$len$怎么维护,设$x[i]$表示$i$结尾的最后一段连续$o$的个数 同样可以转化为$x[i]=(x[i-1]+1)*p[i]$ 综上,转移方程为 $$f[i]=f[i-1]+(2*x[i]+1)*p[i]$$ code 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long

【洛谷P1654】OSU!

微笑、不失礼 提交于 2019-12-01 20:10:44
题目 https://www.luogu.org/problem/P1654 题意 给定每个位置为$1$的几率,一段长度为$x$的连续的并且极大的$1$对得分的贡献为$x^3$,求得分的期望。 题解 显然,我们可以换一种统计答案的方式,把贡献分给每个极长的前缀$1$,设在序列的第$i$个位置时,这个贡献为$val_i$。 当$i$前面有且仅有$x$个$1$时,$val_i=(x+1)^3-x^3=3x^2+3x+1$ 答案式为$$\sum_{A}(\prod_{a_i=1}{p_i}\prod_{a_j=0}{(1-p_j)}\sum_{k=1}^{n}{val_k})$$ 来源: https://www.cnblogs.com/shxnb666/p/11716068.html

Luogu_P1365 WJMZBMR打osu! 期望

末鹿安然 提交于 2019-12-01 18:26:59
Luogu_P1365 WJMZBMR打osu! ### 期望 题目链接 题意很容易理解 设之前的连续的'o'个数已经为 \(x\) 这次也为'o' \((x+1)^2-x^2=2*x+1\) 那么每次的成功的贡献就是 \(2*x+1\) 假如只有'o'和'x'就很好解决了 但是还有'?'求期望 就设 \(p[i]\) 为当前这位成功的概率 明显'o'就是 \(p[i]=1\) 'x'就是 \(p[i]=0\) '?'就是 \(p[i]=0.5\) 那就把每次的贡献乘 \(p[i]\) 就是每次的期望贡献了 代码如下: (不要忘记上面的 \(x\) 是上一位的 \(x\) ,所以在写的时候应该是 \((2*x[i-1]+1)*p[i]\) ) #include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int n; double p[maxn],f[maxn],x[maxn]; string s; int main() { scanf("%d",&n);cin>>s; for(int i=0;i<n;i++){ if(s[i]=='o') p[i+1]=(double)1.0; if(s[i]=='x') p[i+1]=(double)0.0; if(s[i]=='?') p[i+1]=(double)0

P1654 OSU!

为君一笑 提交于 2019-11-27 05:02:15
题目背景 原 《产品排序》 参见P2577 题目描述 osu 是一款群众喜闻乐见的休闲软件。 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X X 个 1 1 可以贡献 X^3 X 3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。 输入格式 第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。 输出格式 只有一个实数,表示答案。答案四舍五入后保留1位小数。 输入输出样例 输入 #1 复制 3 0.5 0.5 0.5 输出 #1 复制 6.0 说明/提示 【样例说明】 000分数为0,001分数为1,010分数为1,100分数为1,101分数为2,110分数为8,011分数为8,111分数为27,总和为48,期望为48/8=6.0 N<=100000 #include<iostream> #include<cstdio> #define N 100005 double p[N]; double x1[N],x2[N],ans[N]; int main() { int n; scanf("%d",&n)