Gym - 101987G Secret Code (概率+数学积分)
题意:有A,B,C三个人要见面,每个人在[0,S]随机选择一个时间点作为见面时间,先到的那个人要等下一个人来了之后和他确认信息,然后马上就走。
例如,假如A先到,B其次,C最后到,那么A要等B到了之后和B确认完信息,然后A走,B再等C到了和C确认完信息,这样任务就完成了。
现给出A,B,C三人的最长等待时间wa,wb,wc,求任务能完成的概率。
题意等价于给出三条长度分别为wa,wb,wc且左端点在[0,S]内随机取值的线段,求第一条线段与第二条线段相交且第二条线段与第三条线段相交的概率。
假如A先到,B其次,C最后到,那么A的左端点取值范围在[0,S]间,B的左端点取值范围在[A,min(A+wa,S)]间,C的左端点取值范围在[B,min(B+wb,S)]间,因此A,B,C三点的取值空间对应的体积为$\int_{0}^{S}dA\int_{A}^{min(A+wa,S)}min(B+wb,S)dB$,这个积分直接求不大容易,可以用自适应simpson暴力搞一搞(注意要多分几段,确保不会出现观测错误)。由于A,B,C的先后排列顺序一共有6种情况,而且每种情况出现的概率相等,因此对每种情况分别求一下积分,然后除以S^3就是所求概率了。
#include<bits/stdc++.h>
using namespace std;
typedef double db;
typedef db fun(db);
const db eps=1e-;
const int N=+;
db S,w[],buf[];
int n,p[];
db simpson(db l,db r,fun f) {return (f(l)+f(r)+*f((l+r)/2.0))*(r-l)/6.0;}
db rsimpson(db l,db r,fun f) {
db mid=(l+r)/2.0;
db a=simpson(l,r,f),b=simpson(l,mid,f),c=simpson(mid,r,f);
if(fabs(a-b-c)<eps)return b+c;
return rsimpson(l,mid,f)+rsimpson(mid,r,f);
}
db itg(db l,db r,fun f,int n=) {
db ret=,di=(r-l)/n;
for(db i=l; i<r-eps; i+=di)ret+=rsimpson(i,i+di,f);
return ret;
}
db fC(db x) {return 1.0;}
db fBC(db B0) {return min(B0+w[],S)-B0;}
db fAB(db A0) {return rsimpson(A0,min(A0+w[],S),fBC);}
db eq(db x,db y) {return fabs(x-y)<eps;}
db solve() {return itg(,S,fAB);}
struct P {
db ans;
int i;
bool operator<(const P& b)const {return eq(ans,b.ans)?i<b.i:ans<b.ans;}
} q[N];
int main() {
scanf("%d",&n);
for(int i=; i<n; ++i) {
scanf("%lf%lf%lf%lf",&S,&buf[],&buf[],&buf[]);
db ans=;
for(int i=; i<; ++i)p[i]=i;
do {
for(int i=; i<; ++i)w[i]=buf[p[i]];
ans+=solve();
} while(next_permutation(p,p+));
ans/=S*S*S;
q[i]= {ans,i};
}
sort(q,q+n);
for(int i=; i<n; ++i)printf("%d%c",q[i].i+," \n"[i==n-]);
return ;
}
还有一种比较直观的做法,首先忽略C,画出A,B的分布空间,是一个二维平面上的梯形,如图所示:
接下来考虑C的取值,由于C的取值只与B有关,因此可以根据y轴上的位置来确定C的取值范围。可以发现,在B∈[0,S-wb]时,C的取值范围恒为[B,B+wb],长度恒为wb,而在B∈[S-wb,S]时,C的取值范围是成线性递减的。综上,可以把总的积分划分成V1和V2两个部分,其中V1=wa*wa*wb/2+(S-wa-wb)*wa*wb,V2=wa*wb*wb/2,化简即为(S-(wa+wb)/2)*wa*wb。
#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=+;
db S,w[];
int n;
struct P {
db ans;
int i;
bool operator<(const P& b)const {return ans==b.ans?i<b.i:ans<b.ans;}
} q[N];
int main() {
scanf("%d",&n);
for(int i=; i<n; ++i) {
scanf("%lf%lf%lf%lf",&S,&w[],&w[],&w[]);
db ans=;
for(int i=; i<; ++i)
for(int j=i+; j<; ++j)
ans+=(S*-w[i]-w[j])*w[i]*w[j];
ans/=S*S*S;
q[i]= {ans,i};
}
sort(q,q+n);
for(int i=; i<n; ++i)printf("%d%c",q[i].i+," \n"[i==n-]);
return ;
}
Gym - 101987G Secret Code (概率+数学积分)的更多相关文章
- Android Secret Code
我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...
- hdu.1111.Secret Code(dfs + 秦九韶算法)
Secret Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- Android 编程下的 Secret Code
我们很多人应该都做过这样的操作,打开拨号键盘输入 *#*#4636#*#* 等字符就会弹出一个界面显示手机相关的一些信息,这个功能在 Android 中被称为 Android Secret Code, ...
- The secret code
The secret code Input file: stdinOutput file: stTime limit: 1 sec Memory limit: 256 MbAfter returnin ...
- [swustoj 679] Secret Code
Secret Code 问题描述 The Sarcophagus itself is locked by a secret numerical code. When somebody wants to ...
- 洛谷 P3102 [USACO14FEB]秘密代码Secret Code 解题报告
P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...
- HDU 1111 Secret Code(数论的dfs)
Secret Code Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- Secret Code
Secret Code 一.题目 [NOIP模拟赛A10]Secret Code 时间限制: 1 Sec 内存限制: 128 MB 提交: 10 解决: 6 [提交][状态][讨论版] 题目描述 ...
- 【微信】根据appid, secret, code获取用户基本信息
function getUserInfo(){ $appid = "yourappid"; $secret = "yoursecret"; $code = $_ ...
随机推荐
- 描述下fastJSON,jackson等等的技术
①Jackson:依赖的jar包较少,简单易用性能高,更新速度也比较快,但是对于复杂类型的json转换bean会出 现问题,一些集合Map,List的转换出现问题,对于复杂类型的bean转换Json, ...
- CentOS 7 分区
必须的分区 boot分区: 作用:引导分区,包含了系统启动的必要内核文件,即使根分区顺坏也能正常引导启动 一般这些文件所占空间在200M以下, 分区建议:分区的时候可选100M-500M之间,如果空间 ...
- Column常用的参数
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,DateTime from sqlalchemy ...
- 【数据库】Redis/MongoDB/MySQL/Oracle随笔索引
数据库体系 [思维导图]数据库体系 密码: a8ni Redis JPA
- ABC133F Small Products
考虑 DP. 状态 令 $f[\ell][x]$ 表示长度为 $\ell$,首项不超过 $x$ 的序列的个数. 答案是 $f[K][N]$. 有递推 $f[\ell][x] = f[\ell][x - ...
- ASP.NET Core中使用EasyCaching作为缓存抽象层
⒈是什么? 和CacheManager差不多,两者的定位和功能都差不多. EasyCaching主要提供了下面的几个功能 统一的抽象缓存接口 多种常用的缓存Provider(InMemory,Redi ...
- mweb发布文章为什么默认TinyMCE编辑器?
如果是通过 metaweblog api 发布的,需要在网站分类中添加 [Markdown] 标记
- CSS3面包屑菜单导航
在线演示 本地下载
- Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
Redis: 缓存过期.缓存雪崩.缓存穿透.缓存击穿(热点).缓存并发(热点).多级缓存.布隆过滤器 2019年08月18日 16:34:24 hanchao5272 阅读数 1026更多 分类专栏: ...
- Java后端技术面试汇总(第二套)
1.Java相关 • Arraylist与LinkedList默认空间是多少:• Arraylist与LinkedList区别与各自的优势List 和 Map 区别:• 谈谈HashMap,哈希表解决 ...