题意:有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 (概率+数学积分)的更多相关文章

  1. Android Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...

  2. hdu.1111.Secret Code(dfs + 秦九韶算法)

    Secret Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  3. Android 编程下的 Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入 *#*#4636#*#* 等字符就会弹出一个界面显示手机相关的一些信息,这个功能在 Android 中被称为 Android Secret Code, ...

  4. The secret code

    The secret code Input file: stdinOutput file: stTime limit: 1 sec Memory limit: 256 MbAfter returnin ...

  5. [swustoj 679] Secret Code

    Secret Code 问题描述 The Sarcophagus itself is locked by a secret numerical code. When somebody wants to ...

  6. 洛谷 P3102 [USACO14FEB]秘密代码Secret Code 解题报告

    P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...

  7. HDU 1111 Secret Code(数论的dfs)

    Secret Code Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  8. Secret Code

    Secret Code 一.题目 [NOIP模拟赛A10]Secret Code 时间限制: 1 Sec  内存限制: 128 MB 提交: 10  解决: 6 [提交][状态][讨论版] 题目描述 ...

  9. 【微信】根据appid, secret, code获取用户基本信息

    function getUserInfo(){ $appid = "yourappid"; $secret = "yoursecret"; $code = $_ ...

随机推荐

  1. 【Web】[原创]ie6,7中td和img之间有间隙

    情形描述 开发工具:VS2010: 浏览器版本:IE6以上,火狐,谷歌: 页面布局设计:Table+Img布局: 项目预览问题:火狐,谷歌,IE8以上未出现问题,IE6,IE7图片之间有间隙. 分析原 ...

  2. Skywalking部署+NetCore客户端

    一.介绍 应用官方的说法:Apache SkyWalking是观察性分析平台和应用性能管理系统.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案 GitHub地址:https://gi ...

  3. CISCO路由器WAN口动态ISP配置

        Building configuration... version 15.0 service timestamps debug datetime msec service timestamps ...

  4. selenium-server--chromedriver环境

    x 准备环境: 1.selenium-server-standalone-3.8.1.jar 2.chromedriver.exe 一.查看本地电脑chrome浏览器版本信息: 二.访问代理地址:ht ...

  5. Sql Server 常见的几种分页方式

    ⒈offset fetch next方式[SqlServer2012及以上版本支持][推荐] select * from T_User order by id offset rows /*(页数-1) ...

  6. Git_基础命令

    gitinit//初始化一个Git仓库" role="presentation">gitinit//初始化一个Git仓库gitinit//初始化一个Git仓库 gi ...

  7. JS基础_数据类型-Null类型和Undefined类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. JAVA网络编程入门

    JAVA网络编程入门 软件结构 C/S结构 B/S结构 无论哪一种结构,都离不开网络的支持.网络编程,就是在网络的条件下实现机器间的通信的过程 网络通信协议 网络通信协议:通信双方必须同时遵守才能完成 ...

  9. 本人亲测-inno setup打包EXE(较完整实例)

    ; Script generated by the Inno Setup Script Wizard.; SEE THE DOCUMENTATION FOR DETAILS ON CREATING I ...

  10. vue-复制功能插件-兼容性最好的插件

    记录给自己用,不进同一次坑: https://github.com/Inndy/vue-clipboard2