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 ...
随机推荐
- nodejs socket server 强制关闭客户端连接
nodejs socket server 强制关闭客户端连接: client.destroy()
- 解决远程桌面关闭后teamviewer不能连接的问题
使用windows远程桌面连接远程电脑,在关闭远程桌面后,windows系统会锁定,此时再用teamviewer连接会出现“无法捕捉画面”或者“拒绝连接”的问题. 解决办法:设置要连接的远程电脑上的t ...
- yii 2 局部关闭 CSRF 拦截
最近在拿 yii 2.0 开发ajax提交,在 post 请求接口时,提示数据无法验证,于是查询 yii 错误日志,发现错误为 exception ‘yiiwebBadRequestHttpExcep ...
- 【HackerRank】 有洞的地图
给你一个n*n的地图.地图中的每个格子有一个值表示该地区的深度.我们称一个地图中的一个格子为空洞,当且仅当该格子不在地图边缘并且每个和它相邻的格子都具有比它更小的深度.两个格子称为相邻如果它们共有一条 ...
- Nagios 服务安装
Nagios 环境部署 安装服务包 操作系统:Linux Centos 6.4 32位 安装包:nagios-3.4.3.tar.gz 安装包:nagios-plugins-1.4.13.tar.gz ...
- 20145231《Java程序设计》第二次实验报告
实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD: 理解并掌握面向对象三要素: 初步掌握UML建模: 熟悉S.O.L.I.D原则: 了解设计模式: 实验要求 实现并体会例子中代码的 ...
- QGIS3.0.3+Qt5.9+VS2015_x64编译
QGIS3.0.3+Qt5.9+VS2015_x64编译 参考:https://blog.csdn.net/u010670734/article/details/80241615 https://ww ...
- Logger日志级别说明及设置方法、说明
日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j ...
- js学习笔记2(5章操作方法)
5.2.5操作 concat();将slice(); 5.2.7位置操作的方法 其他的不赘述 5.5 函数 1.函数其实是对象,每一个函数都是function对象的实例,与其他引用类型一样,都具有属性 ...
- LeetCode——same-tree
Question Given two binary trees, write a function to check if they are equal or not. Two binary tree ...