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