# POJ 1940 Polygon Programming with Ease（高斯消元）

Description

Input

Output

Sample Input
5 14 2 20 4 18 12 12 18 10 10
3 -3 5 -2 5 -3 6
3 -2 10 5 10 -1 12
Sample Output
5 10.000000 2.000000 18.000000 2.000000 22.000000 6.000000 14.000000 18.000000 10.000000 18.000000
3 -4.000000 6.000000 -2.000000 4.000000 -2.000000 6.000000
3 -8.000000 12.000000 4.000000 8.000000 6.000000 12.000000
Solution

Code

#include<cstdio>
#include<iostream>
double x[1010],y[1010],xx[1010],yy[1010];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
double a=0,b=0;//注意初始化
for(i=1;i<=n;i++)
scanf("%lf%lf",&x[i],&y[i]);
printf("%d",n);//按格式输出
for(i=1;i<=n;i++)//用高斯消元求出第一个点的坐标
{
if(i&1)
a+=x[i],b+=y[i];
else
a-=x[i],b-=y[i];
}
xx[1]=a;
yy[1]=b;
for(i=2;i<=n;i++)//递推求出其他点坐标
{
xx[i]=xx[i-1]+2.0*(x[i-1]-xx[i-1]);
yy[i]=yy[i-1]+2.0*(y[i-1]-yy[i-1]);
}
for(i=1;i<=n;i++)
printf(" %.6lf %.6lf",xx[i],yy[i]);
printf("\n");
}
return 0;
} 

06-07 59

05-01 1501

08-03 2918

08-10 832

07-22 995

11-11 761

08-26 890

05-06 616

07-09 2690

08-09 2075