C. Asia区域宫

题目链接:https://www.hpuoj.com/contest/16/problem/C/

 

C. Asia区域宫

单测试点时限: 1.0 秒

内存限制: 512 MB

远古洪荒时期,女王Alice和战神Bob因爱相恋,一段催人泪下的爱情故事流传民间.
相传,女王Alice的美貌惊艳六界,作为对颜值颇有要求的上古灵兽Qaq芳心异动,可是女王早已许配给战神Bob,怎么会移情于己呢,而且单挑自己也不是战神Bob的对手。于是,灵兽Qaq便设计将战神Bob引入洪荒之地,种下十里桃花困住战神Bob。女王Alice得知后,冒着渡劫的天雷赶去营救……实在bian不下去了.
简言之,一个 𝑛×𝑛 的迷宫,Alice站在 (1,1) 位置,Bob被困在 (𝑛,𝑛) 位置,迷宫中会有障碍物,规定障碍物在迷宫中不能同行且不能同列。Alice只能在迷宫中移动且不能跨越障碍物,每次只能移动一个格子且只有上下左右四个方向。
Alice能顺利解救Bob么?若成功解救输出 Yes,并输出最少所用步数.否则输出 No.
如图所示,A 代表Alice,B 代表Bob,# 代表障碍物,箭头代表移动的四个方向:

输入

第一行一个整数 𝑇,代表 𝑇 组测试数据.
对于每一组数据,第一行两个整数 𝑛 和 𝑚,分别表示 𝑛×𝑛 迷宫大小和 𝑚 个障碍物,接下来 𝑚 行,每一行两个整数 𝑥 和 𝑦,表示障碍物坐标 (𝑥,𝑦)
数据保证障碍物不同行且不同列,且不在位置 (1,1),(𝑛,𝑛)
(1𝑇20001𝑚,𝑛100001𝑥,𝑦𝑛)

输出

对于每组测试样例,输出占一行。
若成功解救输出 Yes,并输出最少所用步数.否则输出 No 。

样例

input
2
2 1
1 2
2 2
1 2
2 1
output
Yes 2
No

解题思路:

题目中有一句很重要的话:规定障碍物在迷宫中不能同行且不能同列,

这就表明只要障碍物不是在斜对角线中,那么就一定会有路到,并且最短为2*n-2;

 

只要不是这种斜对角线就行,我们数组从0开始编号,从左到右每条对角线上的数目多1.

我们只要考虑这种情况就可以了。

 

A   X    
  X      
X        
         
        B

 

 

 

 

 

 

 

 

 

 

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=100000+10;

int a[maxn];
int main()
{
    int t,n,m,x,y;
    cin >> t;
    while (t--) {
        memset(a,0,sizeof(a));
        cin >> n >> m;
        int flag = 0;
        while (m--) {
            cin >> x >> y;
            x--,y--;
            a[n+x+y]++;
            if (x+y < n) {
                if (a[n+x+y] == x+y+1) flag = 1;
            }
            else {
                if (a[n+x+y] == n*2-1-x-y) flag = 1;
            }
        }
        if (flag == 0) printf("Yes %d\n",n*2-2);
        else printf("No\n");
    }
    return 0;
}

 

posted @ 2019-04-01 17:36  codeSJCHEN  阅读(181)  评论(0编辑  收藏  举报