POJ 1654 Area 多边形面积 G++会WA
#include<stdio.h> #include<algorithm> #include <cstring> using namespace std; typedef long long ll; const int MAXN = 1000008; char s[MAXN]; int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1}; int dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1}; int main() { // freopen("in.txt","r",stdin); int T; scanf("%d", &T); while(T--) { scanf("%s", s); int len = strlen(s); int x, y, nx, ny; x = y = 0; ll ans = 0; for(int i=0; i<len; i++) { nx = x + dx[s[i]-'1']; ny = y + dy[s[i]-'1']; ans += x*ny - y*nx; x = nx; y = ny; } if(ans < 0) ans = -ans; printf("%I64d", ans / 2); if(ans % 2 == 1) printf(".5"); puts(""); } return 0; }