AT2001

· · 题解

AT2001

萌新一个,第二次提交题解。

原题传送门

本人 AC 记录

题目大意

一个路人(暂且称之为甲好了)从坐标轴原点的位置出发,可以往四个方向(东西南北)方向行走。现在有这样一串的指令,由四个大写字母组成,代表每一步行走的方向。每一步的步长可以任意设定,但是必须最小为一。问:当给出这一串方向指令时,甲可能在指令结束时重新走回原点?

思路解析

这个题其实还挺简单的

既然步长随意,那么我们只需要检查相对方向的指令是否同时出现或者同时不出现就好了。

如:东 东 西 北

我们可以看到,东和西两个相对方向同时出现,所以横向上来说,一定是可以走回原点的。但是这里出现了北,可是并没有出现北的相对方(南)的指令,所以在纵向上还是无法走回原点。

代码详细步骤

不断输入方向指令,并一直记录四个方向的出现状态。

最后再用相对方向进行判断。

(本人这里用了异或,真的只是因为自己实在是太久没有用这个运算符了,所以拿出来重新巩固一下定义,但是跟本没必要。)

附上 AC 代码

#include<iostream>
#include<cmath>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
#include<set>
typedef long long ll;

using namespace std;

int main()
{
    char n;
    //保存4个方向的状态变量,初始为0表示没有出现过
    int W=0,N=0,E=0,S=0;
    while(cin>>n){
    //如果检查到则改为1
        if(n=='W') W=1;
        if(n=='N') N=1;
        if(n=='E') E=1;
        if(n=='S') S=1;
    }

    //并没有任何用处的异或判断
    if(!(W^E)&&!(N^S)){
            cout<<"Yes"<<endl;
        }else{
        cout<<"No"<<endl;
    }
}

本人代码还需要更多的练习,如果有问题请各位大佬们第一时间指正。

谢谢大家!

清小秋

(对不起管理员大大标题忘记加空格了)

(修改内容:提交记录链接)