| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 18800 | Accepted: 5160 | 
Description

Input
Output
Sample Input
4 5 825 6725 6244865
Sample Output
0 0 0.5 2
Source
题意:一个人初始在原点,按照题目所给走法,求最后得到的矩形的面积;1~9分别表示八个方向,5表示停止。
分析:以起点为原点,每走一条路,把起点和终点分别和原点连接构成两个向量,然后用所得向量求出该三角形的面积;最后矩形的面积就是这若干个三角形的面积和。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int INF = 1e9;
const int MOD = 1e9+7;
#define ll long long
#define CL(a,b) memset(a,b,sizeof(a))
#define lson (i<<1)
#define rson ((i<<1)|1)
#define N 50010
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int dx[10]={0,1,1,1,0,0,0,-1,-1,-1};
int dy[10]={0,-1,0,1,-1,0,1,-1,0,1};
char str[1000000+10];
ll area,x,y,px,py;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",str);
        int len = strlen(str);
        if(len<3||'5'==str[0])
        {
            printf("0\n");
            continue;
        }
        area = 0;
        x = y = 0;
        for(int i=0; i<len-1; i++)
        {
            px = x+dx[str[i]-'0'];
            py = y+dy[str[i]-'0'];
            area += (x*py-y*px);
            x = px;
            y = py;
        }
        if(area < 0) area = -area;
        printf("%lld",area/2);
        if(area % 2) printf(".5");
        printf("\n");
    }
    return 0;
}
 
原文:http://blog.csdn.net/d_x_d/article/details/52066837