POJ2054--Triangle

今 天上acm,掌握的不好,写这篇的时候觉得很不好意思,因为这是别人做的,我只是在理解,他大体的思路和我一样,可是我却老是wrong answer。。。伤感啊~~Triangle

这题是学长教我们的,不过我做的不好,这题是pick定理的应用:pick定理就是A=i+d/2-1;(A:表示的是面积,i:落在网格的点的个数,d:是落在线上的点的个数)。

思路:先求出三角形的面积,已知三角形的三点求面积:s=x0*y1+x1*y2+x2*y0-x1*y0-x2*y1-x0*y2;再求落在边上的整点,用求两个数之间差值的最大公约数的方法求出落在边上的点,结果是i=A+1-d/2;

这是我上网搜到的,参考别人的,现在,我知道了最好的方法就是自定义函数,自定义函数可以分块调用,减少错误:

#include<stdio.h>
#include<math.h>
int x[3],y[3];
int gys(int a,int b)
{
 if(a==0)
  return b;
 if(b==0)
  return a;
 if(a>=b)
  return gys(b,a%b);
 else
  return gys(a,b%a);//求最大公约数的自定义函数;
}
int p(int a)
{
 if(a<0)
  a=-a;
 return a;//负数变正数。
}
int main()
{
 int b,s,i;
 while(scanf("%d%d%d%d%d%d",&x[0],&y[0],&x[1],&y[1],&x[2],&y[2])!=EOF)
 {
  if(x[0]==0&&y[0]==0&&x[1]==0&&y[1]==0&&x[2]==0&&y[2]==0)
   break;
  s=x[0]*y[1]+x[1]*y[2]+x[2]*y[0]-x[1]*y[0]-x[2]*y[1]-x[0]*y[2];
  if(s<0)
   s=-s;
  b=gys(p(x[0]-x[1]),p(y[0]-y[1]))+gys(p(x[1]-x[2]),p(y[1]-y[2]))+gys(p(x[2]-x[0]),p(y[2]-y[0]));
  i=1+(s-b)/2;
  printf("%d\n",i);
 }
}

今天上课有点小吃力,觉得好多东西都要学,好多东西都不会,今天还学了动态规划,R3要加油了哦~嘿嘿~大笑相信付出了,就一定会有进步~~嘿嘿~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值