noip模拟赛 机器人

题目描述

早苗入手了最新的Gundam模型。最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧。

早苗的新模型可以按照输入的命令进行移动,命令包括‘E’、‘S’、‘W’、‘N’四种,分别对应东南西北。执行某个命令时,它会向对应方向移动一个单位。作为新型机器人,它可以执行命令串。对于输入的命令串,每一秒它会按命令行动一次。执行完命令串的最后一个命令后,会自动从头开始循环。在0时刻时机器人位于(0,0)。求T秒后机器人所在位置坐标。

输入输出格式

输入格式:

第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令

第2行:一个正整数T

输出格式:

2个整数,表示T秒时,机器人的坐标。

输入输出样例

输入样例#1:
NSWWNSNEEWN
12
输出样例#1:
-1 3

说明

对于60%的数据 T<=500,000 且命令串长度<=5,000

对于100%的数据 T<=2,000,000,000 且命令串长度<=5,000

【注意】

向东移动,坐标改变改变为(X+1,Y);

向南移动,坐标改变改变为(X,Y-1);

向西移动,坐标改变改变为(X-1,Y);

向北移动,坐标改变改变为(X,Y+1);

分析:模拟.直接一位一位的模拟肯定是不行的,但是注意到每一个周期坐标的偏移量是一定的,所以看有多少个周期就好了.

#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

string s;
int T, x, y,tx,ty,s1,s2;

int main()
{
    cin >> s;
    scanf("%d", &T);
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == 'N')
            ty++;
        if (s[i] == 'S')
            ty--;
        if (s[i] == 'W')
            tx--;
        if (s[i] == 'E')
            tx++;
    }
    s1 = T / s.size();
    s2 = T % s.size();
    x = tx * s1;
    y = ty * s1;
    for (int i = 0; i < s2; i++)
    {
        if (s[i] == 'N')
            y++;
        if (s[i] == 'S')
            y--;
        if (s[i] == 'W')
            x--;
        if (s[i] == 'E')
            x++;
    }
    printf("%d %d
", x, y);

    return 0;
}
原文地址:https://www.cnblogs.com/zbtrs/p/7537003.html