Random Point in Triangle【随机数解决期望值问题】
Random Point in Triangle
题目描述
Bobo has a triangle ABC with A(x1,y1),B(x2,y2)A(x1,y1),B(x2,y2) and C(x3,y3)C(x3,y3). Picking a point P uniformly in triangle ABC, he wants to know the expectation value E=max{SPAB,SPBC,SPCA}E=max{SPAB,SPBC,SPCA} where SXYZSXYZ denotes the area of triangle XYZ.
Print the value of 36×E36×E. It can be proved that it is always an integer.
输入描述:
The input consists of several test cases and is terminated by end-of-file.
Each test case contains six integers x1,y1,x2,y2,x3,y3x1,y1,x2,y2,x3,y3.
* |x1|,|y1|,|x2|,|y2|,|x3|,|y3|≤108|x1|,|y1|,|x2|,|y2|,|x3|,|y3|≤108
* There are at most 105105 test cases.
输出描述:
For each test case, print an integer which denotes the result.
输入
0 0 1 1 2 2
0 0 0 0 1 1
0 0 0 0 0 0
输出
0
0
0
题目描述:
多组输入三角形各个顶点坐标p1,p2,p3,在三角形中任取一点p,计算 期望E=max(S(p,p1,p2),max(S(p,p1,p3),S(p,p2,p3)));
思路:
1、产生随机点,选出在三角形内部的点,对每个符合条件的点分别求出最大面积并求和,最后取面积和的平均值即为期望E。 (当随机数足够多时,所有最大面积和的平均值即为期望)
2、根据下面找规律代码可以求出:(由于是跑的随机数,结果定不完全等于22)

3、求出E后可以看出规律,即 36*E=22*S(p1,p2,p3)
补充:
1、根据三角形坐标求三角形面积:向量差乘求三角形面积
2、坐标点结构体:
struct poLL{
LL x;
LL y;
};
struct poLL p1,p2,p3,p;
p1.x=x1,p1.y=y1;
p2.x=x2,p2.y=y2;
p3.x=x3,p3.y=y3;
一看就能看懂,挺好用的,在传点坐标时不用分别传x、y了
找规律代码:
#include<bits/stdc++.h>
using namespace std;
struct point{
double x;
double y;
};
double S(point p1,point p2,point p3) ///向量叉乘求三角形面积可以看上面链接
{
return fabs((p1.x-p3.x)*(p1.y-p2.y)-(p1.x-p2.x)*(p1.y-p3.y));
}
bool judge(point p,point p1,point p2,point p3) ///判断生成的随机点是不是在三角中 原理是:三个
///小三角形面积之和是不是等于原来大的三角形面积
{
if(S(p1,p2,p3)==(S(p1,p2,p)+S(p,p1,p3)+S(p2,p3,p))){
//printf("*%lf %lf %lf %lf\n",S(p1,p2,p3),S(p1,p2,p),S(p,p1,p3),S(p2,p3,p));
return true;
}
return false;
}
int main()
{
double x1,x2,x3,y1,y2,y3;
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF){
double cnt=0;
struct point p1,p2,p3,p;
p1.x=x1,p1.y=y1;
p2.x=x2,p2.y=y2;
p3.x=x3,p3.y=y3;
srand(time(0));
double sum=0;
for(int i=0;i<100000000;i++){
int x=rand();
int y=rand();
p.x=x*1.0,p.y=y*1.0;
if(judge(p,p1,p2,p3)){
cnt++;
sum+=(max(S(p1,p2,p),max(S(p,p1,p3),S(p2,p3,p))));
}
//printf("%.3lf\n",sum);
}
double S1=S(p1,p2,p3);
double q=((sum/cnt)*36.0)/S1;
printf("%.3lf\n",q);
}
return 0;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct poLL{
LL x;
LL y;
};
LL S(poLL p1,poLL p2,poLL p3)
{
return abs((p1.x-p3.x)*(p1.y-p2.y)-(p1.x-p2.x)*(p1.y-p3.y));
}
int main()
{
LL x1,x2,x3,y1,y2,y3;
while(scanf("%lld%lld%lld%lld%lld%lld",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF){
struct poLL p1,p2,p3,p;
p1.x=x1,p1.y=y1;
p2.x=x2,p2.y=y2;
p3.x=x3,p3.y=y3;
printf("%lld\n",11*S(p1,p2,p3));
}
return 0;
}
Random Point in Triangle【随机数解决期望值问题】的更多相关文章
- python random模块(获取随机数)的常用方法及示例
random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用 ...
- C#在循环中使用Random时生成的随机数相同的解决办法
场景 在循环中使用 Random y = new Random(); 生成随机数时每次循环生成的数是一样的. ; i < ;i++ ) { Random y = new Random(); Po ...
- [转载]C# Random 生成不重复随机数
Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它 ...
- Random快速产生相同随机数的原因及解决方案
老生常谈,还是那三句话: 学历代表你的过去,能力代表你的现在,学习代表你的将来 十年河东,十年河西,莫欺少年穷 学无止境,精益求精 问题描述:很多时候我们可能需要在极短的时间内生成大量的随机数,但是你 ...
- C# Random 生成不重复随机数
命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它们是用一种确定的数 ...
- js 生成随机数解决缓存的问题
对于缓存有一个解决方法是在链接后添加随机数 例如登陆后跳转到链接/home,但是有缓存上次用户的登陆名,于是在/home后面加上一个随机数 var href = '/home?'+Math.rando ...
- C#Random随机值重复的解决方法
使用如上图所示的代码,将会出现如下情况,明明是随机,可值都是同样的,这样的随机几率也太小了,所以估计是代码有问题. 于是搜索了下,发现引起这个问题的原因是C#中的Random是根据时间来产生随机数,而 ...
- 使用RandomString方法后,结果返回相同的随机数解决办法
所遇问题: 在做超市管理系统的登录项目时,在对“随机数的产生”出现一个问题,在产生多个随机数的时候,出现了产生了多个一样的随机数,具体代码如下: /// <summary> /// 生成随 ...
- 在使用Math.random()生成6位随机数遇到的问题,并成功得到6位随机数
最近在做卫生局的一个考务网时需要实现一个短信发送验证码的功能,因此就必须使用到随机生成6位验证码的功能,开始觉的简单的,随便写了个 +); String messageCode = String.va ...
随机推荐
- python—day03_函数
1,参数 普通参数 # ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参 def func(name): print(name) # ###### ...
- 两圆相交求面积 hdu5120
转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...
- dede搜索页做法
触发搜索页代码 <p class="fl"> <span>热门搜索:</span> {dede:hotwords num=8 subday=36 ...
- 安装依赖jdk---linux
1,下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2,使用XFTP ...
- 【JAVA习题三】求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加
import java.util.Scanner; public class a加aa加aaa { public static void main(String[] args) { // TODO A ...
- Git-Jenkins-代码的上线
第一章:自动化上线代码基本介绍 1.软件开发生命周期 老板的创意---产品经理---立项---开发团队---测试团队---运维上线 产品经理---加需求---开发团队---测试----更新代码,上线 ...
- [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
引言:继前文<模拟登录并采集数据>,大家似乎看不过瘾,这会再出一发,模拟实现带验证码网站的登录. 这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者 ...
- 一篇文章看清楚 Linux 的职业发展方向
手机.汽车.甚至宇宙飞船,在今天的科技世界中,你几乎到处都能看到 Linux 的身影.前两天 SpaceX 成功将宇航员送入太空的猎鹰9号火箭与龙飞船用的也是 Linux的操作系统.身处与 Linux ...
- 拨开云雾-Verilog是个大杂烩(中性)
https://mp.weixin.qq.com/s/HKxX_79DtnXmFU1Mwt1GwA 一. 有意为之 Verilog是个大杂烩,这是有意而为之. Verilog IEEE S ...
- Flutter 动画鼻祖之CustomPaint
老孟导读:CustomPaint可以称之为动画鼻祖,它可以实现任何酷炫的动画和效果.CustomPaint本身没有动画属性,仅仅是绘制属性,一般情况下,CustomPaint会和动画控制配合使用,达到 ...