May the force be with you!
posts - 52,  comments - 33,  trackbacks - 0

在discuss的提示下比较轻松的切了这道题,了解了pick定理......

要点:   (1)   pick定理:
                    给定顶点座标均是整点(或正方形格点)的简单多边形皮克定理说明了其面积A和内部格点数目i、边上格点数目b的关系:A = i + b/2 - 1;
                定理转载链接:Pick定理
         (2)   在两点(x1,y1),(x2,y2)连线之间的整点个数(包含一个端点)为:gcd(|x1-x2|,|y1-y2|);
         (3)   求三角形面积用叉乘
                                                          2007.10.26
                                                          Simbaforrest
 1 #include<stdio.h>
 2 #include<math.h>
 3 typedef struct tagPoint
 4 {
 5     int x,y;
 6 }Point;
 7 
 8 int double_area(Point a,Point b,Point c)
 9 {
10     return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
11 }
12 
13 int gcd(int a,int b)
14 {
15     if(b==0)
16         return a;
17     return gcd(b,a%b);
18 }
19 
20 int edgenum(Point a,Point b)
21 {
22     int dx,dy;
23     dx=a.x-b.x;
24     if(dx<0)
25         dx=-dx;
26     dy=a.y-b.y;
27     if(dy<0)
28         dy=-dy;
29     return gcd(dx,dy);
30 }
31 
32 int main()
33 {
34     int ab,bc,ca;
35     int edge,area,in;
36     Point a,b,c;
37     while(scanf("%d%d%d%d%d%d",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y),a.x||a.y||b.x||b.y||c.x||c.y)
38     {
39         area=double_area(a,b,c);
40         if(area<0)
41             area=-area;
42         ab=edgenum(a,b);
43         bc=edgenum(b,c);
44         ca=edgenum(c,a);
45         edge=ab+bc+ca;
46         in=(area-edge+2)/2;
47         printf("%d\n",in);
48     }
49     return 0;
50 }
51 


posted on 2007-10-26 17:45 R2 阅读(545) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


你是第 free hit counter 位访客




<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(4)

随笔分类(54)

随笔档案(52)

文章档案(1)

ACM/ICPC

技术综合

最新随笔

搜索

  •  

积分与排名

  • 积分 - 61738
  • 排名 - 357

最新评论

阅读排行榜

评论排行榜