http://162.105.81.212/JudgeOnline/problem?id=1654 把n边多边形划分成n-2个三角形再利用叉积计算 MLE了一次,WA了两次,算叉积的时候,正负要保留,直到求出总面积时在取绝对值。 #include <iostream> using namespace std ; struct Point { __int64 x , y ; }; __int64 step[10][2] ={{0 , 0} , {-1 , -1} , {0 , -1} , {1 , -1} , {-1 , 0} , {0 , 0} , {1 , 0} , {-1 , 1} , {0 , 1} , {1 , 1}} ; Point pre , cur ; char str[1000010] ; __int64 Multiply (Point p1 , Point p2) { return p1.x * p2.y - p1.y * p2.x ; } int main () { __int64 i , T , sum ; scanf ("%I64d" , &T) ; while (T --) { scanf ("%s" , str) ; cur.x = 0 , cur.y = 0 ; for (sum = 0 , i = 0 ; str[i] != '5' ; i ++) { pre = cur ; cur.x += step[str[i] - '0'][0] , cur.y += step[str[i] - '0'][1] ; sum += Multiply (pre , cur) ; } if (sum < 0) sum *= -1 ; if (sum &1) printf ("%I64d.5/n" , sum >> 1) ; else printf ("%I64d/n" , sum >> 1) ; } return 0 ; }