蜀山区2019年信息学竞赛试题
题目描述 Description
近年来,市面上的儿童机器人越来越多,会唱歌、讲故事、人机对话是这些儿童机器人的标配,现在越来越多的机器人已经能在人类的指令下行走、跳舞。小菲菲最近拿到了一个新的新型智能机器人,菲菲的智能机器人可以按照输入的命令进行移动,命令包含’E’、‘S’、‘W’、'N’四种,分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令,它可以执行命令串。对于输入的命令串,每一秒都会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。在0时刻时菲菲将她的机器人放置在了(0,0)的位置,并且输入了命令串。她想知道T秒后她的机器人所在的位置坐标。
输入描述 Input Description
第1行:一个字符串,表示菲菲输入的命令串,保证至少有1个命令;
第2行:一个正整数T
输出描述 Output Description
第1行:两个整数,表示T秒时,菲菲机器人的坐标。
样例输入 Sample Input
NSWWNSNEEWN 12
样例输出 Sample Output
-1 3
数据范围及提示 Data Size & Hint
对于60%的数据:T<=500000且命令串长度<=5000
对于100%的数据:T<=2000000000且命令串长度<=5000
向东移动,坐标改变改变为(X+1,Y);向南移动,坐标改变改变为(X,Y-1);
向西移动,坐标改变改变为(X-1,Y);向北移动,坐标改变改变为(X,Y+1).
这道题是模拟加优化,否则会超时。
代码:
#include<iostream>
using namespace std;
string s;
int n;
int x,y;
int main(){
cin>>s>>n;
if(s.size()>n){
for(int i=1;i<=n;i++){
if(s[i-1]=='E'){
x++;
}else if(s[i-1]=='S'){
y--;
}else if(s[i-1]=='W'){
x--;
}else y++;
}
cout<<x<<' '<<y;
}else{
for(int i=1;i<=s.size();i++){
if(s[i-1]=='E'){
x++;
}else if(s[i-1]=='S'){
y--;
}else if(s[i-1]=='W'){
x--;
}else y++;
}
int f=n%s.size();
n/=s.size();
int ans1,ans2;
for(int i=1;i<=n;i++){
ans1+=x;
ans2+=y;
}
for(int i=1;i<=f;i++){
if(s[i-1]=='E'){
ans1++;
}else if(s[i-1]=='S'){
ans2--;
}else if(s[i-1]=='W'){
ans1--;
}else ans2++;
}
cout<<ans1<<' '<<ans2;
}
return 0;
}