2020ICPC·小米 网络选拔赛热身赛K-Random Point in Triangle

该博客讨论了一道计算几何题目,涉及在三角形内部随机选取一点,计算其与三角形三边形成的三角形最大面积期望。首先通过分析等边三角形的情况,得出期望值,然后推广到任意三角形,尽管未给出证明,但提出了大胆的猜想。博主给出了等边三角形的解析解,并提供了C++代码实现。
摘要由CSDN通过智能技术生成

2020ICPC·小米 网络选拔赛热身赛K-Random Point in Triangle 计算几何


#传送门: https://ac.nowcoder.com/acm/contest/8409/K

题意

给 3 个 点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , 在 三 角 形 内 部 中 取 一 点 p , 设 E = m a x ( S P A B , S P A C , S P B C ) , 求 E 的 概 率 期 望 。 给3个点(x1,y1),(x2,y2),(x3,y3),在三角形内部中取一点p,设E=max(S_{PAB},S_{PAC},S_{PBC}),求E的概率期望。 3(x1,y1),(x2,y2),(x3,y3)pE=max(SPAB,SPAC,SPBC),E

对 于 任 何 三 角 形 , 先 看 看 特 殊 的 等 边 三 角 形 。 然 后 在 推 广 到 任 意 三 角 形 ( A C M 需 要 猜 ! ) 对于任何三角形,先看看特殊的等边三角形。然后在推广到任意三角形(ACM需要猜!) 广ACM
在这里插入图片描述

O 点 为 三 角 形 A B C 的 内 心 。 所 以 对 于 p 的 位 置 的 选 取 , 只 需 要 在 三 角 形 的 一 半 , 然 后 一 半 即 可 。 即 在 三 角 形 O S B 中 选 取 。 O点为三角形ABC的内心。所以对于p的位置的选取,只需要在三角形的一半,然后一半即可。即在三角形OSB中选取。 OABCpOSB

然 后 构 造 下 图 为 : 然后构造下图为:
在这里插入图片描述
设 该 等 边 三 角 形 的 边 长 为 2 a , O N 为 y , N P 为 x , 则 根 据 相 似 可 得 : 设该等边三角形的边长为2a,ON为y,NP为x,则根据相似可得: 2aONyNPx

P H = 2 3 a + x + 3 3 y PH=\frac{2}{3}a+x+\frac{\sqrt 3}{3}y PH=32a+x+33 y
P G = 3 2 P H = 3 3 a + 3 2 x + 1 2 y PG=\frac{\sqrt 3}{2}PH=\frac{\sqrt3}{3}a+\frac{\sqrt 3}{2}x+\frac{1}{2}y PG=23 PH=33 a+23 x+21y

则 E = S P A C = 1 2 ∗ A H ∗ P G = 3 3 a 2 + 3 2 a x + 1 2 a y 则E=S_{PAC}=\frac{1}{2}*AH*PG=\frac{\sqrt3}{3}a^2+\frac{\sqrt 3}{2}ax+\frac{1}{2}ay E=SPAC=21AHPG=33 a2+23 ax+21ay

根 据 上 图 , P 点 的 y 可 在 [ 0 , a 3 a ] 中 选 取 , 所 以 x 可 以 在 [ 0 , 3 y ] 中 选 取 。 根据上图,P点的y可在[0,\frac{\sqrt a}{3}a]中选取,所以x可以在[0,\sqrt 3y]中选取。 Py[03a a]x[03 y]

对 面 积 积 分 如 下 : 对面积积分如下:

∫ 0 a 3 d y ∫ 0 3 y ( 3 3 a 2 + 3 2 a x + 1 2 a y ) d x = 11 36 a 4 \int_{0}^{\frac{\sqrt a}{3}}dy\int_{0}^{\sqrt 3y}(\frac{\sqrt3}{3}a^2+\frac{\sqrt 3}{2}ax+\frac{1}{2}ay)dx=\frac{11}{36}a^4 03a dy03 y(33 a2+23 ax+21ay)dx=3611a4

而 P 点 在 该 区 域 的 选 取 面 积 为 3 6 a 2 , 期 望 为 11 18 3 a 2 , 而 等 边 三 角 形 的 面 积 为 3 a 2 而P点在该区域的选取面积为\frac{\sqrt 3}{6}a^2,期望为\frac{11}{18}\sqrt 3 a^2,而等边三角形的面积为\sqrt 3a^2 P63 a218113 a23 a2
即 期 望 为 11 18 S A B C , 在 乘 以 36 得 22 S A B C 。 即期望为\frac{11}{18}S_{ABC},在乘以36得22S_{ABC}。 1811SABC3622SABC

把 等 边 三 角 形 推 广 到 任 意 三 角 形 , 虽 然 我 不 会 证 明 , 大 胆 猜 测 总 没 错 ! 把等边三角形推广到任意三角形,虽然我不会证明,大胆猜测总没错! 广

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pdd;

#define INF 0x3f3f3f3f
#define lowbit(x) x & (-x)
#define mem(a, b) memset(a , b , sizeof(a))
#define FOR(i, x, n) for(int i = x;i <= n; i++)

// const ll mod = 998244353;
 const ll mod = 1e9 + 7;
// const double eps = 1e-6;
// const double PI = acos(-1);
// const double R = 0.57721566490153286060651209;

void solve() {
    ll x1, x2, x3, y1, y2, y3;
    while(cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3) {
        cout <<  abs(x1 * y2 - x2 * y1 + x3 * y1 - x1 * y3 + x2 * y3 - x3 * y2) * 11 << endl;
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    //cin.tie(nullptr);
    //cout.tie(nullptr);
#ifdef FZT_ACM_LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    signed test_index_for_debug = 1;
    char acm_local_for_debug = 0;
    do {
        if (acm_local_for_debug == '$') exit(0);
        if (test_index_for_debug > 20)
            throw runtime_error("Check the stdin!!!");
        auto start_clock_for_debug = clock();
        solve();
        auto end_clock_for_debug = clock();
        cout << "Test " << test_index_for_debug << " successful" << endl;
        cerr << "Test " << test_index_for_debug++ << " Run Time: "
             << double(end_clock_for_debug - start_clock_for_debug) / CLOCKS_PER_SEC << "s" << endl;
        cout << "--------------------------------------------------" << endl;
    } while (cin >> acm_local_for_debug && cin.putback(acm_local_for_debug));
#else
    solve();
#endif
    return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值