题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。求出最后的多边形面积。
分析:这个多边形面积很明显是不规则的,可以使用向量积直接求出来面积即可。
代码如下:
-----------------------------------------------------------------------------------------------------------------------------------
#include#include const int MAXN = 1e6+7; ///1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。int dir[10][2] = { {},{ 1,-1},{ 1,0},{ 1,1},{ 0,-1},{ 0,0},{ 0,1},{-1,-1},{-1,0},{-1,1} };char s[MAXN];int main(){ int T; scanf("%d", &T); while(T--) { scanf("%s", s); long long ans=0, x=0, y=0, nx, ny; for(int i=0; s[i]; i++) { nx = x+dir[ s[i]-'0' ][0]; ny = y+dir[ s[i]-'0' ][1]; ans += (x*ny - y*nx); x=nx, y=ny; } if(ans < 0)ans *= -1; if(ans % 2 == 0) printf("%lld\n", ans/2); else printf("%lld.5\n", ans/2); } return 0;}