CF1300D-Aerodynamic 求点集是否中心对称

题意没有太读懂...导致我没写完。

就是按照顺时针给你一些点,问这些点是否中心对称。

就用1和n/2+1,求一个中心点。然后看2和n/2+2,3和n/2+3...所求出的中心点是不是一个同一个就行了。

注意n为奇数一定不行。

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 int n;
 5 double x[110000],y[110000],ax,ay;
 6 bool equ(double x,double y)
 7 {
 8     if (fabs(x - y) <= 0.0000000001)
 9         return true;
10     return false;
11 }
12 int main()
13 { 
14     scanf("%d",&n);
15     if (n & 1)
16     {
17         printf("NO\n");
18         return 0; 
19     }
20     for (int i = 1;i <= n;i++)
21         scanf("%lf%lf",&x[i],&y[i]);
22     ax = (x[1] + x[n / 2 + 1]) / 2.0;
23     ay = (y[1] + y[n / 2 + 1]) / 2.0;
24     for (int i = 2;i <= n / 2;i++)
25         if (!equ(ax,(x[i] + x[n / 2 + i]) / 2.0) || !equ(ay,(y[i] + y[n / 2 + i]) / 2.0))
26         {
27             printf("NO\n");
28             return 0; 
29         }
30     printf("YES\n");
31     return 0;
32 }

 

posted @ 2020-02-10 10:16  IAT14  阅读(178)  评论(0编辑  收藏  举报