[模拟]JZOJ 2499 东风谷早苗

Description

  在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女。某一天,早苗终于入手了最新款的钢达姆模型。作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重)。早苗的新模型可以按照输入的命令进行移动,命令包含’E’、’S’、’W’、’N’四种,分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令,它可以执行命令串。对于输入的命令串,每一秒它会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。在0 时刻时早苗将钢达姆放置在了(0,0)的位置,并且输入了命令串。她想要知道T 秒后钢达姆所在的位置坐标。
 

Input

  第1 行:一个字符串,表示早苗输入的命令串,保证至少有1 个命令。
  第2 行:一个正整数T。

Output

  第1 行:两个整数,表示T 秒时,钢达姆的坐标。
 

Sample Input

NSWWNSNEEWN
12

Sample Output

-1 3
 

Data Constraint

 
 

Hint

【数据范围】
  对于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);

分析

这题居然算TG T3难度?

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
struct Point {
    ll x,y;
}d[5001],ans;
char s[5001];
ll t,len,times;

int main() {
    scanf("%s",&s);
    scanf("%lld",&t);
    len=strlen(s);
    for (int i=0;i<len;i++)
    switch (s[i]) {
        case 'N':{
            d[i+1]=d[i];
            d[i+1].y++;
            break;
        }
        case 'S':{
            d[i+1]=d[i];
            d[i+1].y--;
            break;
        }
        case 'W':{
            d[i+1]=d[i];
            d[i+1].x--;
            break;
        }
        case 'E':{
            d[i+1]=d[i];
            d[i+1].x++;
            break;
        }
        default:{
            break;
        }
    }
    times=t/len;
    t%=len;
    ans.x=d[len].x*times+d[t].x;
    ans.y=d[len].y*times+d[t].y;
    printf("%lld %lld",ans.x,ans.y);
}
View Code

 

posted @ 2018-08-23 20:40  Vagari  阅读(188)  评论(0编辑  收藏  举报