POJ 1654

不知 是怎么看出的精度不够,吸经验吧。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

char str[1000050];
int dir[10][2]={
{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}
};

struct point{
	__int64 x,y;
};

__int64 cross(point a,point b){
	return a.x*b.y-b.x*a.y;
}

int main(){
	int t; __int64 xt,yt; __int64 ans;
	scanf("%d",&t);
	getchar();
	while(t--){
		scanf("%s",str);
		xt=yt=0; ans=0; point pre,now; pre.x=pre.y=0;
		for(int i=0;str[i]!=‘5‘;i++){
			xt+=dir[str[i]-‘0‘][0];
			yt+=dir[str[i]-‘0‘][1];
			now.x=xt; now.y=yt;
			ans+=cross(pre,now);
			pre=now;
		}
		if(xt==0&&yt==0){
			if(ans<0) ans=-ans;
			if(ans%2==0)
				printf("%I64d\n",ans/2);
			else printf("%I64d.5\n",ans/2);
		}
		else printf("0\n");
	}
	return 0;
}

  

POJ 1654

时间: 2024-10-06 15:48:26

POJ 1654的相关文章

poj 1654 Area (多边形求面积)

链接:http://poj.org/problem?id=1654 Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14952   Accepted: 4189 Description You are going to compute the area of a special kind of polygon. One vertex of the polygon is the origin of the orth

POJ 1654 Area [多边形面积]

Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19642   Accepted: 5376 Description You are going to compute the area of a special kind of polygon. One vertex of the polygon is the origin of the orthogonal coordinate system. From thi

poj 1654 Area(多边形面积)

Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17456   Accepted: 4847 Description You are going to compute the area of a special kind of polygon. One vertex of the polygon is the origin of the orthogonal coordinate system. From thi

poj 1654 Area(求多边形面积 &amp;&amp; 处理误差)

Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16894   Accepted: 4698 Description You are going to compute the area of a special kind of polygon. One vertex of the polygon is the origin of the orthogonal coordinate system. From thi

poj 1654 Area(求多边形面积)

题意:从原点出发向八个方向走,所给数字串每个数字代表一个方向,终点与原点连线,求所得多边形面积: 思路:(性质)共起点的两向量叉积的一半为两向量围成三角形的面积.以此计算每条边首尾两个向量的叉积,求和,除二: #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const dou

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()

Area - POJ 1654(求多边形面积)

题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的,可以使用向量积直接求出来面积即可. 代码如下: ------------------------------------------------------------------------------------------------------------------------------

POJ 1654 Area 计算几何

#include<stdio.h> #include<string.h> #include<iostream> #include<math.h> using namespace std; 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 s[1000010]; __int64 area,x,y,px,py; int main() { int sum,t

POJ 1654 Area

计算多边形面积的通式 /* 不规则多边形的计算 通过容斥三角形得到答案 */ #include<cstdio> #include<cstring> #define ll long long using namespace std; const int N=1e6+50; char s[N]; int main() { int T,n;scanf("%d",&T);while(T--) { scanf("%s",s+1); n=strl