• 普及C组第一题(8.9)


    2297. 【noip普及组2(放到第一题)】棋盘 (好像重名了)
    (File IO): input:chess.in output:chess.out

    题目描述

    众所周知,国际象棋的棋盘是一个网格。国际象棋中有一种旗子叫象。象每次移动可以斜着走任意格。即假设一只象在网格(x,y),每次移动可以选择一个正整数k,使象移到(x-k,y-k),(x-k,y+k),(x+k,y-k),(x+k,y+k)中的一个格子。
    现有若干组询问,每组询问给出两个格子(x,y),(u,v),你需要回答一只象如果初始时在(x,y),能否通过若干步(可以不走)到达(u,v)。
     

    输入

    第一行一个正整数T,表示询问数量。
    接下来T行,每行四个正整数x,y,u,v,表示一组询问。

    输出

    T行,每行一个”Yes”或”No”(不含引号),表示你的回答。
     

    样例输入

    5
    1 1 2 2
    2 3 2 2
    1 2 4 3
    3 4 2 2
    1 1 1 1

    样例输出

    Yes
    No
    Yes
    No
    Yes
     

    数据范围限制

    对于30%的数据,0<T<=5,0<x,y,u,v<=4
    对于50%的数据,0<T<=10,0<x,y,u,v<=500
    对于100%的数据,0<T<=100,0<x,y,u,v<=10^8

    先上代码:

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    using namespace std;
    int n,x,y,u,v;
    bool dfs(int ,int ,int ,int  );
    int main()
    {
        //freopen("chess.in","r",stdin);
        //freopen("chess.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>x>>y>>u>>v;
            if(dfs(x,y,u,v))
            cout<<"Yes"<<endl;
            else
            cout<<"No"<<endl;
        }
        return 0;
    }
    bool dfs(int a,int b,int c,int d)
    {
        if(a==b&&c==d)
        return true;
        if(a==c&&abs(b-d)%2==0)
        return true;
        if(b==d&&abs(a-c)%2==0)
        return true;
        if((abs(a-c)%2)==(abs(b-d)%2))
        return true;
        return false;
    }

    思路:

    这道题很像深搜对不对,我已开始也是这么想的,结果你迎来的是一个10的八次方的数据。唉!结果你又画了章图,随便标了标,发现惊天大秘密,不用深搜。几个IF语句就能结束。真当你急忙码上去时,你发现有几个是无用的,啊哈哈哈。多有趣的一道题。

    完结撒花!!!

  • 相关阅读:
    网站结构之扁平结构与树形结构的区分
    如何提高网站的访问速度
    CSS透明度大汇总
    Microsoft.AlphaImageLoader滤镜讲解
    浏览器的渲染原理简介
    ACM思维题训练 Section A
    CF--思维练习--CodeForces
    CF--思维练习--CodeForces
    CF--思维练习--CodeForces
    CF思维联系--CodeForces
  • 原文地址:https://www.cnblogs.com/YYCether666/p/11327832.html
Copyright © 2020-2023  润新知