Badeline

Badeline

https://ac.nowcoder.com/acm/problem/207701

题目

来源:广州大学第十四届ACM大学生程序设计竞赛(同步赛)

Madeline 和 Badeline 在一个无限大的二维的坐标系内。
一开始 Madeline 在某个位置,然后 Madeline 在接下来的 n 秒钟内向四个方向移动或者不动,这四个方向分别是上下左右四个方向。
如果在这第 1 秒到第 n 秒内 Madeline 与 Badeline 在任何一个时间点都没有在同一个位置就相当于成功通过旧址。

Badeline 在第 t 秒时的位置是 Madeline 在第 t−k 秒时的位置。而第 1 秒到第 k−1 秒内 Badeline 不在任何位置上,即第 1 秒到第 k−1 秒内 Madeline 与 Badeline 不会在同一个位置。在第 k 秒时 Badeline 在 Madeline 第 0 秒时的位置。

移动方向:U 表示向上移动,D 表示向下移动,L 表示向左移动,R 表示向右移动,S 表示不动。

现在给定 Madeline 在第 1 秒到第 n 秒内的移动,判断这样移动的话会不会登山失败。

解题思路

使用 x 和 y 记录 Madeline 从第 0 秒到第 n 秒的位置。当时间大于等于 k 秒时,判断第 i 秒和第 i-k 秒的位置是否相同,若相同,则失败。

C++代码

#include<iostream>
#include<vector>
using namespace std;

string d = "SUDLR";
int di[5][2] = { {0,0}, {0,1}, {0,-1}, {-1,0}, {1,0} };

int main(){
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;

    vector<int> x(n+1), y(n+1);
    for(int i=0; i<n; ++i){
        for(int j=0; j<5; ++j){
            if(s[i]==d[j]){
                x[i+1] = x[i] + di[j][0];
                y[i+1] = y[i] + di[j][1];
                break;
            }
        }
    }

    bool fail = false;
    for(int i=k; i<=n; ++i){
        if(x[i]==x[i-k] && y[i]==y[i-k]){
            fail = true;
            break;
        }
    }

    if(fail)
        cout << "no" << endl;
    else
        cout << "yes" << endl;
    return 0;
}
全部评论

相关推荐

机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务