只要找出一个顶点,剩下的都可以通过不断的对称得出。设这个顶点为(x,y)。
  奇数边形顶点可以求出来,通过方程2xn-2xn-1+2xn-2-...+...-x=x。
  偶数边形时,方程变成了2xn-2xn-1+2xn-2-...+...+x=x,x无解或无数组解。
  使用实数计算整数时,判断是否等于0直接用“==0”即可。
  Submit 1: WA on 8。数组没赋初值。
  Submit 2: WA on 8。看了一个标程,他数据类型用的double,我也改double试试……
  Submit 3: AC。为啥一定要用double啊?题目只要求了3位有效数字啊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>
using namespace std;
 
int main()
{
    int n;
    double x[10001]={0},y[10001]={0};
    scanf("%d",&n);
    for (int i=1;i<=n;++i)
    {
        scanf("%lf%lf",&x[i],&y[i]);
        x[0]+=i&1?x[i]:-x[i]; y[0]+=i&1?y[i]:-y[i];
    }
    if (!(n&1))
        if (x[0]==0 && y[0]==0) x[0]=y[0]=0.5;
        else {printf("NO\n"); return 0;}
    printf("YES\n%.3lf %.3lf\n",x[0],y[0]);
    for (int i=1;i<n;++i)
    {
        x[i]=x[i]*2-x[i-1]; y[i]=y[i]*2-y[i-1];
        printf("%.3lf %.3lf\n",x[i],y[i]);
    }
    return 0;
}