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 定理+边上的顶点数 恩 学习了 ,不过为什么代码C++能过G++过不了?大牛们能帮我看下吗#include<iostream> #include<cmath> #include<cstdio> using namespace std; struct point{double x,y;}; int EXTENDED_EUCLID(int a,int b,int &x,int &y)//扩展欧几里德算法 { if(b==0) { x=1; y=0; return a; } int r=EXTENDED_EUCLID(b,a%b,x,y); int temp=x; x=y; y=temp-a/b*y; return r; } //计算多边形面积,顶点按顺时针或逆时针给出 double area_polygon(int n,point* p){ double s1=0,s2=0; int i; for (i=0;i<n;i++) s1+=p[(i+1)%n].y*p[i].x,s2+=p[(i+1)%n].y*p[(i+2)%n].x; return fabs(s1-s2)/2; } point p[103]; int main() { int testcase; int n; int i,j; double I,E,s; int x,y; scanf("%d",&testcase); for(i=1;i<=testcase;i++) { E=0; scanf("%d",&n); point temp; temp.x=temp.y=0; p[0]=temp; double dx,dy; for(j=1;j<=n;j++) { scanf("%lf%lf",&dx,&dy); temp.x+=dx; temp.y+=dy; p[j]=temp; } s=area_polygon(n,p); for(j=1;j<n;j++) { E+=EXTENDED_EUCLID((int)(abs(p[j].x-p[j-1].x)+0.1),(int)(abs(p[j].y-p[j-1].y)+0.1),x,y); } E+=EXTENDED_EUCLID((int)(abs(p[n-1].x-p[0].x)+0.1),(int)(abs(p[n-1].y-p[0].y)+0.1),x,y); I=s+1-E/2; printf("Scenario #%d:\n",i); printf("%.0lf %.0lf %.1lf\n\n",I,E,s); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator