模拟赛 东风谷早苗

题目描述 

 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女。某一天,早苗终于入手了最新款的钢达姆模型。作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重)。早苗的新模型可以按照输入的命令进行移动,命令包含’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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值