「NOIP模拟赛」机器人
「题目描述」
早苗入手了最新的Gundam模型。最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧。
早苗的新模型可以按照输入的命令进行移动,命令包括‘E’、‘S’、‘W’、‘N’四种,分别对应东南西北。执行某个命令时,它会向对应方向移动一个单位。作为新型机器人,它可以执行命令串。对于输入的命令串,每一秒它会按命令行动一次。执行完命令串的最后一个命令后,会自动从头开始循环。在0时刻时机器人位于(0,0)。求T秒后机器人所在位置坐标。
「输入格式」
第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令
第2行:一个正整数T
「输出格式」
2个整数,表示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);
题解
就是把一次命令模拟完然后计算在T的时间内进行了几次命令,最后一次不完整的话直接模拟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; ll l1,r1,u1,d1; ll l,r,u,d; ll T; char ch[5001]; int main() { //freopen("robot.in","r",stdin); //freopen("robot.out","w",stdout); scanf("%s",ch); int len=strlen(ch); for(int i=0;i<len;i++) if(ch[i]=='E')r1++; else if(ch[i]=='S')d1++; else if(ch[i]=='W')l1++; else if(ch[i]=='N')u1++; scanf("%I64d",&T); r=(T/len)*r1; d=(T/len)*d1; u=(T/len)*u1; l=(T/len)*l1; for(int i=0;i<T%len;i++) if(ch[i]=='E')r++; else if(ch[i]=='S')d++; else if(ch[i]=='W')l++; else if(ch[i]=='N')u++; printf("%I64d %I64d",r-l,u-d); //system("pause"); return 0; } |
Subscribe