乙個手掌圖形,共有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製成 ...