TOJ 1011 Area【Pick定理】

      题意是给出格子上的N个点的坐标,求出多边形的面积及格子内部的点和边上的点的个数。  

      这个题主要用到了一个定理,叫做Pick定理。意思是由格子上的点所围成的多边形,有这么一个性质:多边形边上的点的个数on和内部点的个数in的关系式Area = on / 2 + in - 1;

      求面积可以用叉乘。

      PS:Pick定理是Pick这个人在集中营提出的,据说那时候好多人在集中营百般聊赖,就拿石头在地上乱画,提出了不少理论。汗。。。

 

      #include<stdio.h> #include<stdlib.h> #include<math.h> int px[100],py[100]; int gcd(int a,int b){ int temp; while(b!=0){ temp=b; b=a%b; a=temp; } return a; } int main(void) { int cas,dx,dy,on,in,i,j,n; double area; scanf("%d",&cas); for(j=1;j<=cas;j++){ scanf("%d",&n); px[0]=py[0]=dx=dy=area=on=0; for(i=1;i<=n;i++){ scanf("%d%d",&dx,&dy); on+=gcd(abs(dx),abs(dy)); px[i]=px[i-1]+dx; py[i]=py[i-1]+dy; area+=(px[i-1]*py[i]-px[i]*py[i-1]); } area=area/2.0; in=area+1-on/2; printf("Scenario #%d:/n%d %d %.1lf/n/n",j,in,on,area); } }  

 

你可能感兴趣的:(TOJ 1011 Area【Pick定理】)