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\n", x, y); return 0; }