[POJ1654]Area(计算几何)
2017-01-02 19:35
357 查看
题目描述
传送门题意:
1右下2右3右上4下5回到原点6上7左下8左9左上
起点在原点,按照操作进行,走出来一个多边形,求多边形的面积。
题解
这题好毒啊…比较卡内存,1500+的MLE看起来很多人都不看题…
然后就是貌似double会炸精度,从走法上看最后的面积只有可能是整数或者0.5的小数,于是用longlong然后最后特判一下就行了
代码
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define N 1000005 #define LL long long struct Vector { LL x,y; Vector(LL X=0,LL Y=0) { x=X,y=Y; } }; typedef Vector Point; Vector operator - (Vector A,Vector B) {return Vector(A.x+B.x,A.y+B.y);} LL mx[10]={0,1,1,1,0,0,0,-1,-1,-1}; LL my[10]={0,-1,0,1,-1,0,1,-1,0,1}; int T,n; LL x,y,area; Point P,A,B; char ch; LL Abs(LL x) { return (x>0)?x:-x; } LL Cross(Vector A,Vector B) { return A.x*B.y-A.y*B.x; } int main() { scanf("%d\n",&T); while (T--) { x=y=0;P=Point(0,0);area=0; ch=getchar(); if (ch=='5') {ch=getchar();puts("0");continue;} x+=mx[ch-'0'],y+=my[ch-'0']; A=Point(x,y); ch=getchar(); while (ch!='5') { x+=mx[ch-'0'],y+=my[ch-'0']; B=Point(x,y); area+=Cross(A-P,B-P); A=B; ch=getchar(); }ch=getchar(); area=Abs(area); printf("%lld",area/2); if (area&1) puts(".5"); else puts(""); } }
相关文章推荐
- 【计算几何】poj 1654 Area
- POJ 1654 Area计算几何(解题报告)
- POJ 1654 Area(计算几何)
- 计算几何--POJ--1654--Area
- [POJ1654]Area(计算几何-多边形的面积)
- poj 1654 Area ----- 计算几何
- poj 1654 Area(计算几何)
- poj1654—Area(计算几何求多边形面积)
- (计算几何POJ step 8.1.1.2)POJ 1654 Area(使用叉积来计算多边形面积)
- poj1654 Area (计算几何)
- POJ 1654 Area 【叉乘+外积的几何意义】【计算几何】
- POJ 1654 Area 计算几何基础
- POJ 1654 Area 计算几何
- Area poj 1654 计算几何
- POJ 1654 Area(计算几何)
- poj1654 Area 计算几何
- poj1654---计算几何
- POJ 1654(计算几何基础多边形面积)
- POJ 1265 Area (计算几何)(Pick定理)
- POJ 1265-Area(计算几何+皮克定理+多边形面积公式)