POJ 1940 公式推导
题意:
给出中点求顶点(结合样例的图)。顶点个数是奇数
题解:
很容易想到高斯消元,然后他为什么强调是奇数?
随便找一个奇数个点的多边形一推导,就可以直接推出其中一个待求点的坐标,然后即推算就可以了。
偶数时就不行了。。。
View Code
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 #define N 1010 9 10 using namespace std; 11 //奇数条边的时候满足,偶数时不确定 12 struct PO 13 { 14 double x,y; 15 }s[N],t[N]; 16 17 int n; 18 19 inline void read() 20 { 21 for(int i=1;i<=n;i++) scanf("%lf%lf",&s[i].x,&s[i].y); 22 } 23 24 inline void go() 25 { 26 double a=0.0,b=0.0; 27 for(int i=n;i>=1;i--) 28 { 29 if(i&1) a+=s[i].x,b+=s[i].y; 30 else a-=s[i].x,b-=s[i].y; 31 } 32 t[1].x=a; t[1].y=b; 33 for(int i=2;i<=n;i++) 34 { 35 t[i].x=t[i-1].x+2.0*(s[i-1].x-t[i-1].x); 36 t[i].y=t[i-1].y+2.0*(s[i-1].y-t[i-1].y); 37 } 38 printf("%d",n); 39 for(int i=1;i<=n;i++) 40 printf(" %.6lf %.6lf",t[i].x,t[i].y); 41 puts(""); 42 } 43 44 int main() 45 { 46 while(scanf("%d",&n)!=EOF) read(),go(); 47 return 0; 48 }
没有人能阻止我前进的步伐,除了我自己!