zoukankan      html  css  js  c++  java
  • poj 2954 Triangle Pick公式


    http://poj.org/problem?id=2954
    计算三角内部座标值为整数的点有多少个(不包括边上和顶点的点)。
    Pick公式的应用:Area=a/2+b-1;a为边界点,b为内部点。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<cstdio>
     4 #include<vector>
     5 #include<cmath>
     6 #include<algorithm>
     7 using namespace std;
     8 struct point
     9 {
    10     int x,y;
    11 }p[4];
    12 struct line
    13 {
    14     int a,b,c;
    15 }q[4];
    16 int num,ans;
    17 void lines(point p1,point p2)
    18 {
    19     int a,b,c;
    20     a=p2.y-p1.y;
    21     b=p1.x-p2.x;
    22     c=p2.x*p1.y-p2.y*p1.x;
    23     q[num].a=a;
    24     q[num].b=b;
    25     q[num++].c=c;
    26 }
    27 void solve(int t)
    28 {
    29     int i,y;
    30     int a,b;
    31     if(p[t].x==p[t+1].x)
    32     {
    33         ans+=abs(p[t].y-p[t+1].y)-1;
    34         return;
    35     }
    36     a=p[t].x;b=p[t+1].x;
    37     if(p[t].x>p[t+1].x)
    38     {
    39         a=p[t+1].x;b=p[t].x;
    40     }
    41     for(i=a+1;i<b;i++)
    42     {
    43         y=q[t].a*i+q[t].c;
    44         if(y%q[t].b==0)
    45         ans++;
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     int i;
    52     int area;
    53     while(scanf("%d%d%d%d%d%d",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y)!=EOF&&(p[0].x||p[0].y||p[1].x||p[1].y||p[2].x||p[2].y))
    54     {
    55         num=0;
    56         p[3]=p[0];
    57         area=0;
    58         for(i=0;i<3;i++)
    59         area+=p[i].x*p[i+1].y-p[i].y*p[i+1].x;
    60         area=abs(area);
    61         for(i=0;i<3;i++)
    62         lines(p[i],p[i+1]);
    63         ans=0;
    64         for(i=0;i<3;i++)
    65         solve(i);
    66         ans+=3;
    67         ans=(area-ans)/2+1;
    68         printf("%d\n",ans);
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    面向领域的微服务架构
    java常用工具类
    java字节码解析
    详解 Java 内部类
    MongoDB配置教程
    oracle18c相关
    VBS编辑文件夹下所有excel文档
    oracle新增主键
    sqlldr加载字符问题
    ora-00257
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740207.html
Copyright © 2011-2022 走看看