兔八哥与猎人【普及-】

该程序旨在解决一个位置判断问题:在MxN的果树矩阵中,猎人和兔八哥各位于不同果树,判断兔八哥是否安全。如果猎人与兔八哥之间有果树隔开,兔八哥即安全。输入包含多组数据,每组包括猎人和兔八哥的坐标。通过计算坐标差的互质性来确定是否存在整数坐标点在两者之间,从而决定输出yes或no。
摘要由CSDN通过智能技术生成

兔八哥与猎人

题目描述

兔八哥躲藏在树林旁边的果园里。果园有 M × N M \times N M×N 棵树,组成一个 M M M N N N 列的矩阵,水平或垂直相邻的两棵树的距离为 1 1 1。兔八哥在一棵果树下。

猎人背着猎枪走进了果园,他爬上一棵果树,准备杀死兔八哥。

如果猎人与兔八哥之间没有其它的果树,猎人就可以看到兔八哥。

现己知猎人和兔八哥的位置,编写程序判断兔子所在的位置是否安全.

输入格式

第一行为 n n n,表示有 n n n 组数据,每组数据的第一行为两个正整数 a x a_x ax a y a_y ay,表示猎人的位置,第二行为两个正整数 b x b_x bx b y b_y by,表示兔八哥的位置。

输出格式

共有 n n n 行,每行为 yesno 表示兔八哥的位置是否安全。

样例 #1

样例输入 #1

1
1 1
1 2

样例输出 #1

no

提示

1 ≤ n ≤ 1 0 5 1\le n \le 10^5 1n105 1 ≤ a x , a y , b x , b y ≤ 1 0 8 1 \le a_x, a_y, b_x, b_y \le 10^8 1ax,ay,bx,by108


根据题意,可以得出猎人与兔子位置分布如下是no
在这里插入图片描述

一开始根本没有想到,最外围的三角形也是可以的,只是想到了包围的8个位置。

你会发现如果两个坐标之差的最大公约数为1,那么他们之间就没有整点;

如果不是1,兔子就能存活

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{cin>>n;
int a,b,c,d;
 for(int i=1;i<=n;i++)
   {cin>>a>>b>>c>>d;
    if(a==c||b==d)
    //特判,排除兔和人在同行或同列的情况,防止__gcd函数出错
      if(abs(a-c)+abs(b-d)<=1) 
       cout<<"no"<<endl;
      else cout<<"yes"<<endl;
      //否则兔子和猎人间至少有一棵树,兔子是安全的
    else if(__gcd(abs(a-c),abs(b-d))==1) cout<<"no"<<endl;
    //判断两点之间的纵坐标之差与横坐标之差是否互质,互质则两点间没有树
         else cout<<"yes"<<endl;//反之人兔间至少有一棵树
   }
return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值