Agc007_C Pushing Balls
题目大意
在一条直线上有$N$个球和$N+1$个洞,每两个球之间有一个洞,每两个洞之间有一个球,最左端和最右端都是洞,其中产生的$2N$个间隔满足从左到右是等差数列。你每次随机选择一个未被推进洞的球,将它随机向左或向右推动直到遇见一个洞,这时求会滚进洞内填满这个洞,接下来的球会正常从这个洞上方经过,显而易见不会有球撞到球或走出边界的情况,求所有任一方案所有球移动距离的期望。
题解
人类智慧题
将题目转化为有$2N$个区间,每次可以拿走$2$个相邻的端点并获得端点距离的贡献
考虑移动一次后剩下的$2N-2$个区间,单独考虑每一个区间,假设第$1$个区间,设首项为$X$,公差为$K$。
若我们拿走$2N$个区间中的第$1$个,则第一个区间会从$X$增加为$X+2K$,即长度变成了原序列中的第$3$个区间。
若我们拿走$2N$个区间中的第$2$个,则第一个区间会从$X$增加为$3X+3K$,即长度变成了原序列中的前$3$个区间。
其余情况第一个区间不变,则第一个区间期望增加$\frac{2X+5K}{2N}$。
同理,发现每个区间变化的期望会形成一个等差数列,那么$2N-2$个区间仍然能构成一个等差数列。
我们只要不断维护这一等差数列,维护首项末项公差,每次对答案的贡献是首项与末项的平均数。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define DB double
#define M 400020
using namespace std;
int read(){
int nm=0,fh=1; char cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
LL n,tot,d[M];
DB ans,fs,ed,k,dt;
int main(){
n=read(),fs=read(),k=read();
ed=fs+k*(n*2-1);
for(int i=(n<<1);i;i-=2){
ans+=((fs+ed)/2.0);
fs+=(fs*2+k*5)/(i*1.0); dt;
ed+=dt=(ed*2-k*5)/(i*1.0); dt;
if(i>2) k=(ed-fs)/((i-2)*1.0-1.0);
}
printf("%.17lf\n",ans);
return 0;
}
Agc007_C Pushing Balls的更多相关文章
- AGC007C Pushing Balls
题目链接 题意:\(N\)个坑,\(N+1\)个球,相间分布,距离为以\(d_1\)为首项,\(x\)为公差的等差数列.对于每次操作,随机选择一个未入坑的球,随机选择向左或向右,掉入第一个没有球的坑, ...
- agc007C - Pushing Balls(期望 等差数列)
题意 题目链接 翻译来自神仙yyb Sol 又是一道神仙题.. 我开始的思路是枚举空位,但是还是不能做,GG 标算过于神仙,其中一些细节我也理解不了 题目给出的实际是一个首项为$d$,公差为$x$的等 ...
- AGC007C Pushing Balls —— 期望的神题
Problem Link 题意: 序列上按顺序交错有 \(n\) 个球和 \(n+1\) 个洞,即 \(hole_1,ball_1,hole_2,ball_2,\dots,ball_n,hole_{n ...
- AtCoder Grand Contest 007
AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...
- AtCoder Grand Contest
一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...
- Atcoder训练计划
争取三天做完一套吧,太简单的就写一句话题解吧(其实也没多少会做的). 自己做出来的在前面用*标记 agc007 *A - Shik and Stone 暴力dfs即可,直接判断个数 *B - Cons ...
- A_G_C_007
AGC007 A Shik and Stone 我是沙比这都能蛙一发 https://agc007.contest.atcoder.jp/submissions/7946110 B Construct ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- 【AtCoder】AGC007
AGC007 A - Shik and Stone 如果i + j走过的格子只有一个,那么就是可以走到 #include <bits/stdc++.h> #define fi first ...
随机推荐
- AJAX实现弹窗显示详情,全选和批量删除
以Nation表为例,将Nation表显示在页面上,每一行数据前面加上复选框,后面加上查看详情,点击以弹窗形式显示每一行的数据,并且在表格最后一行加上全选复选框,点击选中全部数据,后面跟一个批量删除按 ...
- SPOJ - HORRIBLE 【线段树】
思路 线段树 区间更新 模板题 注意数据范围 AC代码 #include <cstdio> #include <cstring> #include <ctype.h> ...
- hadoop03---nginx+keepalived
1.1.反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求 ...
- JavaScript笔记03——文档对象模型(Document Object Model,简称DOM):获取HTML元素、操作HTML元素
Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强.[1] DOM实际上是以面向对象方式描述的文档模型.DOM定 ...
- INSPIRED启示录 读书笔记 - 第28章 创业型公司的产品管理
产品设计方式 第一步:创业初期只设三个职位,产品经理.交互设计师和原型开发人员(职位可以兼任) 第二步:快速展开产品设计(高保真原型),邀请真实的目标用户验证产品原型,迭代修改 第三步:随着迭代的深入 ...
- ceph安装各种报错
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph-disk-activate –mark-init sysvini ...
- 吴恩达深度学习笔记(九) —— FaceNet
主要内容: 一.FaceNet人脸识别简介 二.使用神经网络对人脸进行编码 三.代价函数triple loss 四.人脸库 五.人脸认证与人脸识别 一.FaceNet简介 1.FaceNet是一个深层 ...
- 如何在java代码中调用一个web项目jsp或者servlet
有时候需要调用一个web项目的jsp或者servlet,但是执行内部的代码,并不是打开jsp,例如需要在一段java代码中清除一个web项目中的缓存,那么可以把清除缓存的代码放在该web项目的一个se ...
- 【P3522】TEM(单调队列+DP)
这个题,题目很长,然而亲爱的翻译已经帮你读完题了,一句话题意. 要求不下降的最长,那么这一段肯定满足队首的左区间不大于队尾的右区间,单调队列容易求解. #include<iostream> ...
- QT 事件处理 KeyPressEvent 和 定时器时间 Timer
1. 按键事件响应, 两种方法,一种直接处理Event,过滤出KeyPress,另一种直接处理KeyPressEvent. bool Dialog::event(QEvent *e) { if( e- ...