Area
题目大意
规定
1
−
4
1-4
1−4 分别代表,向右下走,向右走,向右上走,向下走,
5
5
5 代表回到原点,
6
−
9
6-9
6−9 代表,向上走,向左下走,向左走,向左上走。
多组数据,每组数据从
(
0
,
0
)
(0,0)
(0,0) 开始,求描绘出多边形的面积。
P
S
PS
PS:不要管题目写的什么东西,英文翻译过来完全是错的。
解题思路
模拟图形,计算几何求面积。
code
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std;
const int xn[10]={0,1,1,1,0,114514,0,-1,-1,-1};
const int yn[10]={0,-1,0,1,-1,1919810,1,-1,0,1};
int T;
char a[1000010];
signed main()
{
cin>>T;
while(T--)
{
cin>>a+1;
int n=strlen(a+1),ans=0;
int x=0,y=0,xx=0,yy=0;
for(int i=1;i<=n;i++)
{
if(a[i]=='5') xx=0,yy=0;
else xx=x+xn[a[i]-'0'],yy=y+yn[a[i]-'0'];
ans+=x*yy-xx*y;
x=xx,y=yy;
}
ans=(ans>=0?ans:-ans);
if(ans%2==0)
printf("%lld\n",ans/2);
else
printf("%lld.5\n",ans/2);
}
}