2010年1月27日星期三.sgu136

2010年1月27日星期三.sgu136

2010年1月27日星期三.sgu136

sgu136:高斯消元的特殊形式

题目给出了一个n边形每个边的中点,也就相当于给出了两组方程。

(+) x0 + x1 = in[0][0]
(-) x1 + x2 = in[1][0]
(+) x2 + x3 = in[2][0]
(-) x3 + x0 = in[3][0]

(+) y0 + y1 = in[0][1]
(-) y1 + y2 = in[1][1]
(+) y2 + y3 = in[2][1]
(-) y3 + y0 = in[3][1]

然后对于这两组方程,分别按照奇偶关系,直接将四组值奇加偶减
直接求出x0,y0,
然后分别带入下面的式子挨个计算即可。


 1  int  main()
 2  {
 3     int  i,j,k;
 4    scanf( " %d " , & n);
 5     for  (i  =   1 ;i  <=  n;i ++ ) {
 6        scanf( " %lf %lf " ,x  +  i,y  +  i);
 7        x[i]  *=   2 ;
 8        y[i]  *=   2 ;
 9    }
10 
11     for  (i  =   1 ;i  <=  n;i ++ ) {
12         if (i  &   1 ) {
13            rx[ 0 +=  x[i];
14            ry[ 0 +=  y[i];
15        } else  {
16            rx[ 0 -=  x[i];
17            ry[ 0 -=  y[i];
18        }
19    }
20 
21     if  (n  &   1 ) {
22        puts( " YES " );
23        rx[ 0 /=   2 , ry[ 0 /=   2 ;
24         for  (i  =   1 ;i  <  n;i ++ ) { rx[i]  =  x[i]  -  rx[i - 1 ]; }
25         for  (i  =   1 ;i  <  n;i ++ ) { ry[i]  =  y[i]  -  ry[i - 1 ]; }
26         for  (i  =   0 ;i  <  n;i ++ ) {
27            printf( " %f %f\n " ,rx[i],ry[i]);
28        }
29    }  else   if ((n  &   1 ==   0   &&  rx[ 0 ==   0   &&  ry[ 0 ==   0 ) {
30        puts( " YES " );
31         for  (i  =   1 ;i  <  n;i ++ ) { rx[i]  =  x[i]  -  rx[i - 1 ]; }
32         for  (i  =   1 ;i  <  n;i ++ ) { ry[i]  =  y[i]  -  ry[i - 1 ]; }
33         for  (i  =   0 ;i  <  n;i ++ ) {
34            printf( " %f %f\n " ,rx[i],ry[i]);
35        }
36    }  else  {
37        printf( " NO\n " );
38    }
39     return   0 ;
40  }
41 

你可能感兴趣的:(2010年1月27日星期三.sgu136)