2020牛客暑期多校訓練營(第三場)C 計算幾何

2022-05-03 19:57:11 字數 1049 閱讀 4604

乙個手掌圖形,共有20個點,通過按順時針或逆時針的順序給定這20個點的座標,判斷是左手還是右手。左手和右手是對稱的,給定的點集可能是這個手掌圖形旋轉平移後的結果,但手掌圖形的大小不會改變。

讀題後很容易發現手掌底部這條線段的長度為9是固定的,並且相鄰的拇指和小指的邊的長度不一樣,這樣就很容易能判斷出來給定的手掌是右手還是左手,唯一缺少的條件是如何判斷這些點是順時針還是逆時針給你的。

鞋帶公式可以判斷這個問題:通過鞋帶公式可以以點的座標求出這個多邊形的面積,當這個面積計算結果為負數為,說明給出的點集是以順時針遍歷的,反之則為逆時針。

還需要注意的是這題eps開到0.1就夠用了

#includeusing namespace std;

using ll = long long;

const ll n = 1e6;

const double pi = acos(-1.0);

const double eps = 0.1;

#define test ll tesnum;tesnum = read();while(tesnum--)

ll read();

struct node

point[n];

int find()

if(ans<0)else

}double dis(node a,node b)

int main()

int fl = find();

bool f = false;//右手

for(int i = 0; i < 20; i++)

if((fl==1&&fabs(dis(y,z)-8.0)<=eps)||(fl==0&&fabs(dis(y,z)-6.0)<=eps))

break;}}

if(f)else

cout<<"right"<};

return "bt7274", null;

}inline ll read()

while (isdigit(boluo))

return hcy * dia;

}

牛客暑期多校訓練營B Boundary

給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...

2020牛客暑期多校訓練營(第三場) 解題報告

溫暖的簽到題。include using namespace std define ll long long ll input string s int main const int n 2e6 7 int x,ans char s n int main if s i 1 if s i 2 s i ...

2019牛客暑期多校訓練營(第三場)

目錄 b crazy binary string 思維 d big integer 數論 f planting trees 思維 單調佇列 h magic line 計算幾何 j lru management 模擬 題意 計算最長的01子串和子串行,其中01數量相同。分析 對於子串那麼直接將0製成 ...