zoukankan      html  css  js  c++  java
  • hihoCoder1599 bfs

    特殊的剪枝,整体上和辗转相除法有点像

    #1599 : 逃离迷宫4

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Hi被坏女巫抓进一座由无限多个格子组成的矩阵迷宫。

    小Hi一开始处于迷宫(x, y)的位置,迷宫的出口在(a, b)。小Hi发现迷宫被女巫施加了魔法,假设当前他处在(x, y)的位置,那么他只能移动到(x+y, y)或者(x, x+y)的位置上。

    小Hi想知道自己能不能逃离迷宫。

    输入

    第一行包含一个整数T,代表测试数据的组数。  

    以下N行每行包含4个整数x, y, a, b,表示起点在(x, y),出口在(a, b)。  

    对于30%的数据,1 ≤ T ≤ 10, 1 ≤ x, y, a, b ≤ 100  

    对于80%的数据,1 ≤ T ≤ 1000, 1 ≤ x, y, a, b ≤ 1000  

    对于100%的数据,1 ≤ T ≤ 10000, 1 ≤ x, y, a, b ≤ 109

    输出

    对于每组数据输出一行YES或者NO,表示小Hi是否能逃离迷宫。

    样例输入
    2  
    1 1 8 13  
    2 2 100 101
    样例输出
    YES  
    NO


    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<string>
    using namespace std;
    int a,b,c,d;
    bool _find(int u,int v){
         while(1){
             if(u==0||v==0) return false;//试一下分母为0的话会怎么样 
             if(u<a&&v<b) return false;
             if(u<b&&v<a) return false;
             if(u<v){
               u^=v;
               v^=u;
               u^=v;
             }
             if(v==a&&u>=b&&(u-b)%v==0) return true;
             if(v==b&&u>=a&&(u-a)%v==0) return true;
             int tmp=u%v;
             u=v;v=tmp;
         }
    }
    int main()
    {
        int T,i;
        scanf("%d",&T);
        while(T--){
            scanf("%d%d%d%d",&a,&b,&c,&d);
            if(_find(c,d)) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    zabbix笔记之计算型监控项详解
    zabbix笔记之磁盘IO介绍
    zabbix笔记之Graphtree配置
    zabbix笔记之告警时远程执行命令
    zabbix笔记之异常优化
    zabbix笔记之IPMI配置
    基本的sql 语句
    socket 套接字
    调用父类的三种方法
    实例属性和类属性
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7718178.html
Copyright © 2011-2022 走看看