poj1265 & poj2954(皮克定理pick)在格点上的多边形求面积公式
2015-03-20 19:10
375 查看
题目就不贴了。大概都是pick定理解决。
pick:S=a+b/2-1。s是多边形面积,a是多边形内的格点,b是多边形线或者顶点上的格点。
多边形线上的格点用gcd定理求。两顶点x和y变化的坐标最大公约数即是格点在这条线上的数量。
poj1265:
pick:S=a+b/2-1。s是多边形面积,a是多边形内的格点,b是多边形线或者顶点上的格点。
多边形线上的格点用gcd定理求。两顶点x和y变化的坐标最大公约数即是格点在这条线上的数量。
poj1265:
#include<limits> #include<queue> #include<vector> #include<list> #include<map> #include<set> #include<deque> #include<stack> #include<bitset> #include<algorithm> #include<functional> #include<numeric> #include<utility> #include<sstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #define LL __int64 #define eps 1e-8 #define pi acos(-1) using namespace std; int gcd(int a,int b){ if (b==0) return a; else return gcd(b,a%b); } int main(){ int T,i,n; scanf("%d",&T); for (int cas=1;cas<=T;cas++){ scanf("%d",&n); int x=0,y=0,xx,yy; scanf("%d%d",&x,&y); int a=gcd(fabs(x),fabs(y)); int b=0; double ans=0; for (i=1;i<n;i++){ scanf("%d%d",&xx,&yy); a+=gcd(fabs(xx),fabs(yy)); xx+=x; yy+=y; ans+=(x*yy)-(xx*y); x=xx; y=yy; } ans=fabs(ans)/2; b=(ans+1-a/2); printf("Scenario #%d:\n",cas); printf("%d %d %.1f\n",b,a,ans); if (cas!=T) cout<<endl; } return 0; }poj2954:
#include<limits> #include<queue> #include<vector> #include<list> #include<map> #include<set> #include<deque> #include<stack> #include<bitset> #include<algorithm> #include<functional> #include<numeric> #include<utility> #include<sstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #define LL __int64 #define eps 1e-8 #define pi acos(-1) using namespace std; struct point{ int x,y; }; point p[10]; int gcd(int a,int b){ if (b==0) return a; else return gcd(b,a%b); } int across(point a,point b,point c){ return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x); } int main(){ while (~scanf("%d%d%d%d%d%d",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y)){ if (p[0].x==0 && p[0].y==0 && p[1].x==0 && p[1].y==0 && p[2].x==0 && p[2].y==0) break; int area=fabs(across(p[0],p[1],p[2]))/2; int s=gcd(fabs(p[0].x-p[1].x),fabs(p[0].y-p[1].y)); s+=gcd(fabs(p[1].x-p[2].x),fabs(p[1].y-p[2].y)); s+=gcd(fabs(p[0].x-p[2].x),fabs(p[0].y-p[2].y)); int ans=area+1-s/2; printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 1265 Area (Pick定理&多边形面积)
- poj 1265 Area(Pick公式 多边形面积 边点数)
- poj2954 && poj1265 Pick定理求面积
- POJ 1265 (Pick 公式+求任意多边形面积+顶点多边形的边整点个数)
- POJ 3348 Cows 凸包 + 多边形面积公式
- poj1265--Area(求多边形面积+匹克定理)
- POJ 3348 Cows 凸包 + 多边形面积公式
- POJ 1265 Area (简单多边形求面积+pick公式)
- POJ 1265 Area [格点多边形面积 pick公式]
- POJ 1265 Area pick定理 + 多边形面积求法
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
- pku 2954 Triangle && pku 1265 Area Pick定理的应用 + 叉积求多边形面积
- poj 1265 皮克定理+多边形面积+边上点的数量的求取
- 【POJ 1265】 Area (Pick定理+叉积求多边形面积)
- POJ 1265-Area(多边形面积、边点、内点-pick定理、叉积)
- poj1265-Area 皮克定理(求多边形的面积,内部的点数,边上的点数)
- poj 1654 Area(求多边形面积 && 处理误差)
- POJ 1265 Area (皮克定理,多边形面积计算)
- POJ1265——Area(Pick定理+多边形面积)
- Area - POJ 1265(pick定理求格点数+求多边形面积)