题目描述
在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女。某一天,早苗终于入手了最新款的钢达姆模型。作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重)。早苗的新模型可以按照输入的命令进行移动,命令包含’E’ 、 ’S’ 、 ’W’ 、 ’N’四种,分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应
方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令,它可以执行命令串。对于输入的命令串,每一秒它会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。 在 0 时刻时早苗将钢达姆放置在了(0,0)的位置,并且输入了命令串。她想要知道 T 秒后钢达姆所在的位置坐标。
输入格式
第 1 行:一个字符串,表示早苗输入的命令串,保证至少有 1 个命令
第 2 行:一个正整数 T
输出格式
第 1 行:两个整数,表示 T 秒时,钢达姆的坐标
输入样例
NSWWNSNEEWN
12
输出样例
-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<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int T,l;
ll e[5010],n[5010],xt,yt;
char a[5010];
void work()
{
int i;
for(i=0;i<l;i++)
{if(a[i]=='N') n[i]++;
else if(a[i]=='S') n[i]--;
else if(a[i]=='E') e[i]++;
else e[i]--;
n[i+1]=n[i];
e[i+1]=e[i];
}
xt=e[l-1]; yt=n[l-1];
int k=T/l,b=T%l;
xt=xt*k; yt=yt*k;
if(b==0) return;
xt=xt+e[b-1]; yt=yt+n[b-1];
}
int main()
{
freopen("robot.in","r",stdin);
freopen("robot.out","w",stdout);
scanf("%s",a);
l=strlen(a);
scanf("%d",&T);
work();
printf("%I64d %I64d\n",xt,yt);
return 0;
}