机器人行走

文章描述了一个信息学竞赛题目,涉及对儿童机器人的模拟,机器人根据输入的命令串(E,S,W,N)移动,要求计算在特定时间T后的坐标位置。提供的代码示例展示了如何处理命令串并计算坐标,强调了模拟和优化的重要性以避免超时。
摘要由CSDN通过智能技术生成

蜀山区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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值