题解:P13059 [GCJ 2020 #1C] Overexcited Fan

· · 题解

非常简单的一道题,那就来水一篇题解。

思路

我们只需要模拟小猫的行径,并且每走一步,比较此时两人间的曼哈顿距离(即水平距离加竖直距离)以及你在这段时间内能走的最远距离,如是能走到,则输出此刻的时间;反之,输出 \texttt{IMPOSSBLE}

代码不难,但一定一定不能忘记计算曼哈顿距离要加绝对值

#include<bits/stdc++.h>
#define man main //纯玩,小朋友不要模仿 
using namespace std;

int pd(int x,int y,string s) //写成函数可以更好地处理IMPOSSIBLE的情况 
{
    for(int i = 0;i < s.size();i++)
    {
        if(s[i] == 'N') y++;
        else if(s[i] == 'S') y--;
        else if(s[i] == 'E') x++;
        else if(s[i] == 'W') x--;
        if(abs(x) + abs(y) <= i + 1) return i + 1; //绝对值!!! 
    }
    return 0;
}

int man()
{
    int t;
    cin >> t;
    for(int l = 1;l <= t;l++)
    {
        int x,y;
        string s;
        cin >> x >> y >> s;
        int t = pd(x,y,s);
        cout << "Case #" << l << ": ";
        if(t) cout << t << endl;
        else cout << "IMPOSSIBLE" << endl;
    }
    return 0;
}