计算几何初步——面积公式(POJ 1654)
2012-01-17 14:57
483 查看
这题要注意一点就是数据类型的选择。。。
一定要选__int64或者long long,否则很容易出问题。
其余的就是直接用公式。。。。。
View Code
一定要选__int64或者long long,否则很容易出问题。
其余的就是直接用公式。。。。。
View Code
#include<iostream> #include<cstring> #include<cstdio> #define MAXN 1000004 #define END 5 using namespace std; __int64 dir[10][2]; struct point { __int64 x, y; }; char data[MAXN]; void ini() { dir[7][0] = dir[4][0] = dir[1][0] = -1; dir[9][0] = dir[6][0] = dir[3][0] = 1; dir[2][0] = dir[8][0] = 0; dir[9][1] = dir[8][1] = dir[7][1] = 1; dir[3][1] = dir[2][1] = dir[1][1] = -1; dir[6][1] = dir[4][1] = 0; } __int64 cross(point &p, point &q) { return q.y*p.x - p.y*q.x; } int main() { int T; ini(); scanf("%d",&T); getchar(); while (T--) { cin>>data; __int64 sx(0), sy(0); point p1,p2; p2.x = p1.x = sx; p2.y = p1.y = sy; __int64 nowx(0), nowy(0); int len = strlen(data); if (len == 1 || len == 3) { cout<<0<<endl; continue; } __int64 area(0); for (int i(0),j(1); i<len-3; ++i) { j = i + 1; nowx += dir[data[i] - '0'][0]; nowy += dir[data[i] - '0'][1]; p1.x = nowx; p1.y = nowy; p2.x = nowx + dir[data[j] - '0'][0]; p2.y = nowy + dir[data[j] - '0'][1]; area += cross(p1,p2); } if (area < 0)area = -area; if(area % 2)printf("%I64d.5\n", area/2); else printf("%I64d\n", area/2); } return 0; }
相关文章推荐
- POJ 2079(计算几何初步——凸包加旋转卡壳)
- POJ 3304(计算几何初步——判断线段和直线相交,加上枚举)
- 计算几何--POJ--1654--Area
- POJ 1654 Area计算几何(解题报告)
- (计算几何POJ step 8.1.1.2)POJ 1654 Area(使用叉积来计算多边形面积)
- POJ 1410(计算几何初步——判断线段与矩形相交,条件恶心的一B啊,又没说清楚)
- poj 1654 Area ----- 计算几何
- POJ 1654 Area 计算几何
- POJ 1269(计算几何初步——简单处理解析几何,求直线交点)
- poj1654 Area 计算几何
- POJ 2318(计算几何初步——叉积加2分)
- POJ 1654(计算几何基础多边形面积)
- [POJ1654]Area(计算几何)
- POJ 1584(计算几何初步——凸包判断,圆与多边形,点是否在多边形内)
- POJ 1654 Area(计算几何)
- poj 1654(计算几何)(差乘运用)
- POJ 1654 Area(计算几何)
- poj 1654 Area(计算几何)
- Area poj 1654 计算几何
- [Poj 2187]计算几何之凸包(三) {旋转卡壳初步}