【JZOJ 2499】【NOIP2011模擬7.28】東風谷早苗 (模擬)

問題描述
 在幻想鄉,東風谷早苗是以高達控聞名的高中生宅巫女。某一天,早苗終於入手了最新款的鋼達姆模型。作爲最新的鋼達姆,當然有了與以往不同的功能了,那就是它能夠自動行走,厲害吧(好吧,我自重)。早苗的新模型可以按照輸入的命令進行移動,命令包含’E’、’S’、’W’、’N’四種,分別對應四個不同的方向,依次爲東、南、西、北。執行某個命令時,它會向着對應方向移動一個單位。作爲新型機器人,自然不會只單單執行一個命令,它可以執行命令串。對於輸入的命令串,每一秒它會按照命令行動一次。而執行完命令串最後一個命令後,會自動從頭開始循環。在0 時刻時早苗將鋼達姆放置在了(0,0)的位置,並且輸入了命令串。她想要知道T 秒後鋼達姆所在的位置座標。
輸入
第1 行:一個字符串,表示早苗輸入的命令串,保證至少有1 個命令。
第2 行:一個正整數T。
輸出
第1 行:兩個整數,表示T 秒時,鋼達姆的座標。
樣例輸入
NSWWNSNEEWN
12
樣例輸出
-1 3
算法討論
可以看出,鋼達姆的移動是有規律的循環,那我們做一次完整的循環,記錄移動的橫縱座標距離,那之後所有的循環移動的都是這個距離,最後再把不足一次完整的循環手動做一遍就好了。

#include <cstdio>
#include <iostream>
#define MAX_N 5006
using namespace std;
const int dx[5]={0,1,0,-1,0},dy[5]={0,0,-1,0,1};
int t,x,y,nx,ny,l;
char c[MAX_N];

int main()
{
    cin>>c+1;
    scanf("%d",&t);
    int i=1;
    while (t && (c[i]=='E' || c[i]=='S' || c[i]=='W' || c[i]=='N'))
    {
        if (c[i]=='E')  x+=dx[1],y+=dy[1];
        if (c[i]=='S')  x+=dx[2],y+=dy[2];
        if (c[i]=='W')  x+=dx[3],y+=dy[3];
        if (c[i]=='N')  x+=dx[4],y+=dy[4];
        i++; t--;
    }
    nx=x; ny=y;
    if (t)
    {
        l=i-1;
        i=1;
    }
    while (t)
    {
        if ((t / l)!=0)
        {
            x+=nx,y+=ny,t-=l;
            continue;
        }
        if (c[i]=='E')  x+=dx[1],y+=dy[1];
        if (c[i]=='S')  x+=dx[2],y+=dy[2];
        if (c[i]=='W')  x+=dx[3],y+=dy[3];
        if (c[i]=='N')  x+=dx[4],y+=dy[4];
        i++; t--;
    }
    printf("%d %d",x,y);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章