zoukankan      html  css  js  c++  java
  • poj 2954 Triangle (pick 定理 的应用 )

    题意 :

    求一个三角形中的 整数 点有多少个?

    题接:

     
    多边形的面积 (在网格 图中):

    pick 定理  s = b/2  + in  - 1  (b 表示 边上的点   in 表示 内部的点)

     边上的点数 = gcd(|x1 - x2| ,|y1 - y2|);

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<set>
     7 #include<map>
     8 #include<queue>
     9 #include<vector>
    10 #include<string>
    11 #define Min(a,b) a<b?a:b
    12 #define Max(a,b) a>b?a:b
    13 #define CL(a,num) memset(a,num,sizeof(a));
    14 #define maxn  110
    15 #define eps  1e-6
    16 #define inf 9999999
    17 using namespace std;
    18 struct point
    19 {
    20     int x;
    21     int y;
    22 }p[4];
    23 int det(int x1,int y1,int x2,int y2)
    24 {
    25     return x1*y2 - x2*y1;
    26 }
    27 int cross(point a,point b,point c)
    28 {
    29     return det(b.x - a.x,b.y - a.y,c.x - a.x,c.y - a.y);
    30 }
    31 int gcd(int a,int b)
    32 {
    33     if(b == 0return a;
    34 
    35     return gcd(b,a%b);
    36 }
    37 int main()
    38 {
    39     int x1,x2,x3,y1,y2,y3 ;
    40     //freopen("data.in","r",stdin);
    41     while(scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3) == 6)
    42     {
    43         if(x1==0&&x2 == 0&&x3 == 0&&y1 == 0&&y2 ==0&&y3 ==0break;//不知为什么 写在 scanf 后 就不对
    44         p[1].x = x1;
    45         p[1].y = y1;
    46         p[2].x = x2;
    47         p[2].y = y2;
    48         p[3].x = x3;
    49         p[3].y = y3;
    50 
    51         int s = cross(p[1],p[2],p[3]);
    52         if(s < 0) s = -s ;
    53         int num = 0;
    54         int t1 = abs(p[1].x - p[2].x) ;
    55         int t2 = abs(p[1].y - p[2].y);
    56 
    57         num +=gcd(t1,t2);
    58 
    59         t1 = abs(p[2].x - p[3].x);
    60         t2 = abs(p[2].y - p[3].y);
    61         num+=gcd(t1,t2);
    62 
    63         t1 = abs(p[3].x - p[1].x);
    64         t2 = abs(p[3].y - p[1].y);
    65         num+=gcd(t1,t2);
    66         //printf("%lf  %d   ++++\n",s,num);
    67        int  ans =  (s + 2 - num)/2;
    68 
    69         printf("%d\n",ans);
    70 
    71 
    72 
    73 
    74     }
    75 }
  • 相关阅读:
    大型网站技术架构读书笔记目录
    读书笔记1: 大型网站架构演化
    关于HTML5中的canvas标签的个个人理解
    javascript的部分功能实现
    简易计算机的做法
    关于C语言的学习和理解
    体验LESS CSS 框架
    在学习ps中的问题和理解。
    关于做登录页面
    css实现动画功能
  • 原文地址:https://www.cnblogs.com/acSzz/p/2656947.html
Copyright © 2011-2022 走看看