poj2954Triangle

Posted achenchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2954Triangle相关的知识,希望对你有一定的参考价值。

传送门

Pick定理

定点坐标为整点的三角形,面积为S,边上的整点个数为L,三角形内部整点个数为N

S=N+L/2-1

技术分享图片
 1 //Achen
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<queue>
 9 #include<cmath>
10 #include<set>
11 #include<map>
12 #define Formylove return 0
13 #define For(i,a,b) for(int i=(a);i<=(b);i++)
14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
15 typedef long long LL;
16 typedef double db;
17 using namespace std;
18 LL x[10],y[10];
19 
20 template<typename T>void read(T &x)  {
21     char ch=getchar(); x=0; T f=1;
22     while(ch!=-&&(ch<0||ch>9)) ch=getchar();
23     if(ch==-) f=-1,ch=getchar();
24     for(;ch>=0&&ch<=9;ch=getchar()) x=x*10+ch-0; x*=f;
25 }
26 
27 db get_S(int x,int y,int xx,int yy) {
28     return abs(x*yy-xx*y)/2.0;
29 }
30 
31 LL gcd(LL a,LL b) { return !b?a:gcd(b,a%b); }
32 
33 db get_L(int x,int y,int xx,int yy) {
34     if(xx-x==0&&yy-y==0) return 0;
35     if(xx-x==0) return abs(yy-y)-1;
36     if(yy-y==0) return abs(xx-x)-1;
37     return gcd(abs(x-xx),abs(y-yy))-1;
38 }
39 
40 int main() {
41 #ifdef ANS
42     freopen(".in","r",stdin);
43     freopen(".out","w",stdout);
44 #endif
45     for(;;) {
46         read(x[1]); read(y[1]);
47         read(x[2]); read(y[2]);
48         read(x[3]); read(y[3]);
49         if(x[1]==0&&y[1]==0&&x[2]==0&&y[2]==0&&x[3]==0&&y[3]==0) break;
50         db S=get_S(x[2]-x[1],y[2]-y[1],x[3]-x[1],y[3]-y[1]);
51         db L=3+get_L(x[1],y[1],x[2],y[2])+get_L(x[1],y[1],x[3],y[3])+get_L(x[2],y[2],x[3],y[3]);
52         db n=S-L/2.0+1;
53         printf("%d
",(int)n);
54     }
55     Formylove;
56 }
View Code

 

以上是关于poj2954Triangle的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2954 Triangle [pick定理,叉积,计算几何]

poj2954Triangle

POJ 2954 /// 皮克定理+叉积求三角形面积

poj1265&&2954 [皮克定理 格点多边形]学习笔记

POJ-1163-The Triangle

poj 1163 The Triangle