1. 程式人生 > >uvalive 4413(梅涅勞斯定理)

uvalive 4413(梅涅勞斯定理)

題意:如圖所示,給出P、Q、R三點的座標,AB、BC、AC被點F、D、E劃分成m1:m2、m3:m4、m5:m6,給出m1~m6的數值,求△ABC的三個頂點A、B、C的座標。
這裡寫圖片描述

題解:根據梅涅勞斯定理,如果有兩個三角形是這樣組成的:
這裡寫圖片描述

結論:(BD/DC)×(CE/EA)×(AF/FB)=1
證明省略,直接運用結論,在題中所給的三角形中有6組這樣的三角形,分別可以推出後面兩個邊的比值:
△CBQ 和 △CDR —-> DP / CQ
△BAP 和 △BFQ —-> FR / BP
△ACR 和 △APE —-> QE / AR
△CBE 和 △CDA —-> DP / PA
△BAD 和 △BFC —-> FR / CR
△ACF 和 △AEB —-> EQ / BQ
設DP為x,就能把全部邊都表示成關於x的式子,最後推回DP,就是一個關於x的一元一次方程,直接解方程就得到的DP的長度,進而所有邊的長度都可以求得,為了得到A、B、C的座標,讓點R在向量PR的方向上移動AR的距離就得到了A,其餘兩點類似得出。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
struct Point {
    double x, y;
    Point(double a = 0, double b = 0): x(a), y(b) {}
};
typedef Point Vector;
double dcmp(double
x) { if (fabs(x) < eps) return 0; return x < 0 ? -1 : 1; } Vector operator + (const Point& A, const Point& B) { return Vector(A.x + B.x, A.y + B.y); } Vector operator - (const Point& A, const Point& B) { return Vector(A.x - B.x, A.y - B.y); } Vector operator
* (const Point& A, double a) { return Vector(A.x * a, A.y * a); } Vector operator / (const Point& A, double a) { return Vector(A.x / a, A.y / a); } double Cross(const Vector& A, const Vector& B) { return A.x * B.y - A.y * B.x; } double Dot(const Vector& A, const Vector& B) { return A.x * B.x + A.y * B.y; } double Length(const Vector& A) { return sqrt(Dot(A, A)); } bool operator < (const Point& A, const Point& B) { return A.x < B.x || (A.x == B.x && A.y < B.y); } bool operator == (const Point& A, const Point& B) { return A.x == B.x && A.y == B.y; } Point P, Q, R; double m1, m2, m3, m4, m5, m6; int main() { int t; scanf("%d", &t); while (t--) { scanf("%lf%lf%lf%lf%lf%lf", &P.x, &P.y, &Q.x, &Q.y, &R.x, &R.y); scanf("%lf%lf%lf%lf%lf%lf", &m1, &m2, &m3, &m4, &m5, &m6); double RP = Length(P - R); double RQ = Length(R - Q); double PQ = Length(P - Q); double t1 = m1 * RP / (m1 + m2) / RQ; // DP / CQ double t2 = m5 * RQ / (m5 + m6) / PQ; // FR / BP double t3 = m3 * PQ / (m3 + m4) / RP; // QE / AR double t4 = m1 * m3 / (m1 + m2) / m4; // DP / PA double t5 = m1 * m5 / (m5 + m6) / m2; // FR / CR double t6 = m3 * m5 / (m3 + m4) / m6; // EQ / BQ double DP = (t4 * RP + t6 * t4 * PQ / t3 + t6 * t5 * t4 * RQ / t3 / t2) / (1 - t6 * t5 * t4 / t3 / t2 / t1); double AR = DP / t4 - RP; Point A = R + (R - P) * (AR / RP); double BP = t5 / t2 * (DP / t1 + RQ); Point B = P + (P - Q) * (BP / PQ); double CQ = DP / t1; Point C = Q + (Q - R) * (CQ / RQ); printf("%.8lf %.8lf %.8lf %.8lf %.8lf %.8lf\n", A.x, A.y, B.x, B.y, C.x, C.y); } return 0; }

相關推薦

uvalive 4413(定理)

題意:如圖所示,給出P、Q、R三點的座標,AB、BC、AC被點F、D、E劃分成m1:m2、m3:m4、m5:m6,給出m1~m6的數值,求△ABC的三個頂點A、B、C的座標。 題解:根據梅涅勞斯定理,如果有兩個三角形是這樣組成的: 結論:(BD/DC

LA 4413 定理

#include <bits/stdc++.h> using namespace std; struct Point { double x, y; Point(double x = 0, double y = 0): x(x), y(y) {} }; typ

LA 4413 Triangle Hazard 定理的應用

題目地址:pdf版本 比如說求A,我們知道了向量PR ,只需要求出PA/PR的值,就知道向量PA,這樣加上P就可以求出A。 關於比例的計算,用到梅涅勞斯定理  純平面幾何內容。 然後簡化計算時,用到了輪換對稱性,減少程式碼量。 程式碼: #include<iostre

Routh-Hurwitz Criterion 穩定判據

處理方法 函數 -m 要求 case 運用 進行 滿足 不同 Routh-Hurwitz Criterion 為什麽僅僅要有一個極點在右半平面,那麽系統就不會穩定? 比如H(s) =( 1/(s+1) ) * ( 1/(

【模版】盧卡定理

https 常用 分享 for 模版 組合 ron 技術分享 scan 給定n,m,p 求 (m改為n) C表示組合數。 一個測試點內包含多組數據。 輸入輸出格式 輸入格式: 第一行一個整數T,表示數據組數 第二行開始共T行,每行三個數n m p,意義如上 輸出格式: 共T

bzoj 2111: [ZJOI2010]Perm 排列計數 (dp+盧卡定理

dir code def -1 text eight clu 階乘 typedef bzoj 2111: [ZJOI2010]Perm 排列計數 1 ≤ N ≤ 10^6, P≤ 10^9 題意:求1~N的排列有多少種小根堆 1: #i

洛谷——P3807 【模板】盧卡定理

|| turn thml 數據 mod text clu -h eset P3807 【模板】盧卡斯定理 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤10?5??) 求 C_{n+m}^{m

【學習筆記】盧卡定理

namespace style pan set thml color 怎麽辦 alt fontsize 洛谷 P3807 【模板】盧卡斯定理 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤10?5??) 求 C_{

洛谷 P3807 【模板】盧卡定理

cnblogs col define 包含 main radius adg log lag 題目背景 這是一道模板題。 題目描述 給定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105) 求 C_{n+m}^{m}\ mod\ pCn

Codeforces 451E Devu and Flowers【容斥原理+盧卡定理

d+ 題意 while markdown post mark 色相 esp printf 題意:每個箱子裏有\( f[i] \)種顏色相同的花,現在要取出\( s \)朵花,問一共有多少種顏色組合 首先枚舉\( 2^n \)種不滿足條件的情況,對於一個不被滿足的盒子,我們至

bzoj 1951: [Sdoi2010]古代豬文 【中國剩余定理+歐拉定理+組合數學+盧卡定理

amp == pri pla 質因數分解 b+ return ons gcd 首先化簡,題目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 對於乘方形式快速冪就行了,因為p是質數,所以可以用歐拉定理 \[ G^{\sum_{i|n}C_{n}^{

洛谷.3807.[模板]盧卡定理(Lucas)

lin 不同 階乘 markdown return ++ down .org .com 題目鏈接 Lucas定理 日常水題...sublime和C++字體死活不同步怎麽辦... //想錯int範圍了...不要被longlong坑 //這個範圍現算階乘比預處理快得多 #i

極大似然估計與貝葉定理

lan 說明 概率論 可能性 聯合 訓練樣本 對數 www. 條件 文章轉載自:https://blog.csdn.net/zengxiantao1994/article/details/72787849 極大似然估計-形象解釋看這篇文章:https://www.zhihu

淺談盧卡定理

smi tdi 能夠 char 快速 get through for 除法取模 前幾天gryz組織我們聽了幾天數論,蒟蒻 Nanjo_Qi 自然是聽得一點問題也沒有。 於是只能自己yy著學一點其他的數學的東西,正巧在那之前剛剛學會盧卡斯定理,於是現在就來水一篇博客。 其實是

Bayes' theorem (貝葉定理)

也有 事件 ike 之前 誤差 另一個 nor 條件 一次 前言   AI時代的到來一下子讓人感覺到數學知識有些捉襟見肘,為了不被這個時代淘汰,我們需要不斷的學習再學習。其中最常見的就是貝葉斯定理,這個定理最早由托馬斯·貝葉斯提出。   貝葉斯方法的誕生源於他生前為解決一

洛谷P2480 [SDOI2010]古代豬文(盧卡定理+中國剩余定理

res moto mina spa through 剩余定理 合數 tex pac 傳送門 好吧我數學差的好像不是一點半點…… 題目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我們可以利用費馬小定理$

Luogu4640 BJWC2008 王之財寶 容斥、盧卡定理

範圍 pre 不能 tle 預處理 return while ons 容斥 傳送門 題意:有$N$種物品,其中$T$個物品有限定數量$B_i$,其他則沒有限定。問從中取出不超過$M$個物品的方案數,對質數$P$取模。$N,M \leq 10^9 , T \leq 15 ,

BZOJ4591 SHOI2015超能粒子炮·改(盧卡定理+數位dp)

  注意到模數很小,容易想到使用盧卡斯定理,即變成一個2333進位制數各位組合數的乘積。對於k的限制容易想到數位dp。可以預處理一發2333以內的組合數及組合數字首和,然後設f[i][0/1]為前i位是否卡限制的貢獻就很好dp了。為什麼大家都要化式子呢。 #include<iostream>

組合數取模1:盧卡定理

模板: #include<iostream> #include<algorithm> #include<cstdio> #define ll long long #define N 100005 using namespace std; int k,n,m

聯合概率與聯合分佈、條件概率與條件分佈、邊緣概率與邊緣分佈、貝葉定理、生成模型(Generative Model)和判別模型(Discriminative Model)的區別

在看生成模型和判別模型之前,我們必須先了解聯合概率與聯合分佈、條件概率與條件分佈、邊緣概率與邊緣分佈、貝葉斯定理的概念。 聯合概率與聯合概率分佈: 假設有隨機變數X與Y, 此時,P(X=a,Y=b)用於表示X=a且Y=b的概率。這類包含多個條件且所有條件同時成立的概率稱為聯合概率。聯合概