| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
学习了pick//poj_1256 Area //坐标图上的多边形,求多边形内部点数,边上点数,多边形面积。 //Pick公式:S=I+E/2-1,即多边形的面积=在多边形内的格点数+在多边形边上的格点数/2-1 //先用叉积求多变形面积,再根据公式计算内部点数量 //边界格点数---利用斜边对应的直角边的最大公约数 #include<iostream> #include<cmath> using namespace std; int gcd(int a,int b)//最大公约数 { while(b) { int temp=b; b=a%b; a=temp; } return a; } int get_area(int x1,int y1,int x2,int y2)//叉积求三角形面积 { return (x1*y2-x2*y1); } int main() { //freopen("in.txt","r",stdin); int i,t,n,area,in,on; int x1,y1,x2,y2,x,y; scanf("%d",&t); for(i=1;i<=t;i++) { x1=y1=0; area=on=0; scanf("%d",&n); while(n--) { scanf("%d%d",&x,&y); on+=gcd(abs(x),abs(y));//求边上点的个数 x2=x1+x; y2=y1+y; area+=get_area(x1,y1,x2,y2); x1=x2; y1=y2; } in=area/2-on/2+1; printf("Scenario #%d:\n%d %d %.1lf\n\n",i,in,on,area/2.0); } return 0; } 本页面高亮代码使用codeHl生成,查看详情 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator