CodeForces - 1300D Aerodynamic(几何+思维)
生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 1300D Aerodynamic(几何+思维)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:點(diǎn)擊查看
題目大意:給出一個(gè)凸多邊形,將凸多邊形通過平移,使平移后的凸多邊形可以將原點(diǎn)包含在內(nèi)(在邊或點(diǎn)上也算),所有滿足條件的凸多邊形所形成的新圖形,一定是一個(gè)凸多邊形,問新圖形和原圖形是否為相似圖形
題目分析:這個(gè)題光讀題可能不太好讀明白,但是看了樣例給出的圖示后大概就能明白題意了,其實(shí)題目做起來比較簡單,將給出的樣例在紙上稍微畫畫就可以大膽猜測了,滿足相似的充分必要條件是點(diǎn)數(shù)為偶數(shù),且為中心對(duì)稱圖形,證明的話可以參照這個(gè)up主的視頻,我感覺講的很到位了:
https://www.bilibili.com/video/av87962198?p=4
鑒于幾何問題光靠語言描述可能太抽象了,所以去看一下視頻絕對(duì)是比較高效的學(xué)習(xí)方法
代碼:
#include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;const double eps = 1e-8;int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1; }struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%lf%lf",&x,&y);}bool operator == (Point b)const{return sgn(x-b.x) == 0 && sgn(y-b.y) == 0;}Point operator +(const Point &b)const{return Point(x+b.x,y+b.y);}Point operator /(const double &k)const{return Point(x/k,y/k);} }point[N];bool check(int n) {n/=2;Point mark=(point[1]+point[n+1])/2;for(int i=2;i<=n;i++)if(!(mark==(point[i]+point[i+n])/2))return false;return true; }int main() { //#ifndef ONLINE_JUDGE // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); //#endif // ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++)point[i].input();if(n&1)return 0*printf("NO");if(check(n))puts("YES");elseputs("NO");return 0; }?
總結(jié)
以上是生活随笔為你收集整理的CodeForces - 1300D Aerodynamic(几何+思维)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU - 2457 DNA repai
- 下一篇: CodeForces - 1300E W