原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html

题目传送门 - 2018牛客多校赛第三场 I

题意

  在一个给定的三角形内部随机选择 $n$ 个点,问这些点构成的凸包的期望顶点数。

  $3\leq n\leq 10$

题解

  首先证明一个结论,对于任意三角形,随机撒 $n$ 个点的期望点数相同。

  简单口胡:考虑任意拉扯三角形,三角形内部多边形的凸性都不会改变。

  所以,我们只需要随便选择一个三角形,然后随机选点很多次,建出凸包,得到顶点数,然后算一算平均值,就可以得到答案了。

  注意随机选点次数至少好几亿吧。

  我赛后代码跑了大约 25 分钟才跑出来。

代码1 - 打表

%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=20;
int n;
struct Point{
int x,y;
Point(){}
Point(int _x,int _y){
x=_x,y=_y;
}
}P[N],O;
LL cross(Point a,Point b,Point c){
return 1LL*(b.x-a.x)*(c.y-a.y)-1LL*(c.x-a.x)*(b.y-a.y);
}
int Drand(){
return (int)((((rand()&32767)<<10)+(rand()&1024))&33554431);
}
LL sqr(int x){
return 1LL*x*x;
}
LL dis(Point a,Point b){
return sqr(a.x-b.x)+sqr(a.y-b.y);
}
bool cmp_O(Point a,Point b){
if (a.y==b.y)
return a.x<b.x;
return a.y<b.y;
}
bool cmp_Angle(Point a,Point b){
LL c=cross(O,a,b);
if (c==0)
return dis(O,a)<dis(O,b);
return c>0;
}
int st[N],top;
int Convex(){
for (int i=2;i<=n;i++)
if (!cmp_O(P[1],P[i]))
swap(P[1],P[i]);
O=P[1];
sort(P+2,P+n+1,cmp_Angle);
top=0;
st[++top]=1,st[++top]=2;
for (int i=3;i<=n;i++){
while (top>=2&&cross(P[st[top-1]],P[st[top]],P[i])<=0)
top--;
st[++top]=i;
}
return top;
}
int main(){
freopen("list.txt","w",stdout);
srand(time(NULL));
for (int i=3;i<=10;i++){
n=i;
int tot=200000000,ttt=tot;
int ans=0;
while (tot--){
for (int i=1;i<=n;i++)
while (1){
P[i]=Point(Drand(),Drand());
if (P[i].y<=P[i].x)
break;
}
ans+=Convex();
}
printf("%.6lf\n",((double)ans)/ttt);
}
return 0;
}

  

代码2 - AC 代码

#include <bits/stdc++.h>
using namespace std;
double ans[11]={
0,0,0,
3.000000,
3.666719,
4.166715,
4.566691,
4.899998,
5.185735,
5.435731,
5.657986
};
int main(){
int n;
for (int i=1;i<=7;i++)
scanf("%d",&n);
printf("%.6lf",ans[n]);
return 0;
}

  

2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他的更多相关文章

  1. 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...

  2. 2018牛客网暑假ACM多校训练赛(第三场)G Coloring Tree 计数,bfs

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-G.html 题目传送门 - 2018牛客多校赛第三场 G ...

  3. 2018牛客网暑假ACM多校训练赛(第三场)D Encrypted String Matching 多项式 FFT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-D.html 题目传送门 - 2018牛客多校赛第三场 D ...

  4. 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...

  5. 2018牛客网暑假ACM多校训练赛(第十场)F Rikka with Line Graph 最短路 Floyd

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-F.html 题目传送门 - https://www.n ...

  6. 2018牛客网暑假ACM多校训练赛(第十场)D Rikka with Prefix Sum 组合数学

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-D.html 题目传送门 - https://www.n ...

  7. 2018牛客网暑假ACM多校训练赛(第八场)H Playing games 博弈 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round8-H.html 题目传送门 - https://www.no ...

  8. 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 -  https://www.n ...

  9. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

随机推荐

  1. MySQL - 查看慢SQL

    查看MySQL是否启用了查看慢SQL的日志文件 (1) 查看慢SQL日志是否启用 mysql> show variables like 'log_slow_queries'; +-------- ...

  2. java使用spark/spark-sql处理schema数据

    1.spark是什么? Spark是基于内存计算的大数据并行计算框架. 1.1 Spark基于内存计算 相比于MapReduce基于IO计算,提高了在大数据环境下数据处理的实时性. 1.2 高容错性和 ...

  3. 5分钟搞定Nginx安装

      1. 安装gcc(centos 7之后一般已自带,可以在第6步失败后再安装) yum install gcc gcc-c++   2. 安装pcre yum install -y pcre pcr ...

  4. js获取当前星期几

    使用Date对象的getDay方法可以获取当前日期的星期数. getDay() 方法可返回表示星期的某一天的数字. 示例: var date = new Date(); alert(date.getD ...

  5. 从外部设置传入Go变量

    前提:必须在build/run时指定 -ldflags="-X main.a=2.0 -X main.b=1" , 且a,b必须是string的变量,不能是常量, 不能是struc ...

  6. Cropper.js使用笔记

    官网:https://fengyuanchen.github.io/cropperjs/ github:https://github.com/fengyuanchen/cropperjs 由于文档不好 ...

  7. Java学习——面向对象【3】

    1. 继承  java的类是单继承(一个子类只能继承一个父类),不能多继承(多个父类):A继承自B,A也继承自C,可以多重继承,就是A继承自B,B继承自C(A->B->C), 所有的类都继 ...

  8. Centos 7.3下 Linux For SQL Server安装及配置介绍

    Centos 7.3下 Linux For SQL Server安装及配置介绍 高文龙关注13人评论2828人阅读2017-03-05 21:46:21 Centos 7.3下Linux For SQ ...

  9. 基于DBUtils实现数据库连接池

    小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Anim ...

  10. C#概念总结(二)

    1.C#的方法:<access Specifier>  <Return Type>< Method Name>(Parmeter list){     method ...