SRM 446 DIV1 Easy - CubeWalking ○

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10515&rd=13900

六面体のキューブがある。

キューブの各面は3*3のセルからなり、
真ん中が緑、その上下左右が青、その他は赤色に塗られている。

プレイヤーは最初緑のセルからスタートし、いずれかの方向を向いている。

そこから左に向く、右に向く、前に進むの3種類のコマンドからなる
行動リストが与えられる。

このとき、最終的にいる位置のセルの色を求める。

解き方


キューブを展開して無限のセルの集合と考える。

このとき、最後の位置が最初の位置とx座標、y座標ともに3で割り切れれば緑、
どちらも割り切れないなら赤、どちらでもなければ青色になる。


コード


class CubeWalking {

public: string finalPosition(string movement) {
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int dir=0;

int x=0,y=0;
FORE(i,0,movement.size()){
if(movement[i]=='L')dir--;
else if(movement[i]=='R')dir++;
else{
x+=dx[((dir%4)+4)%4],y+=dy[((dir%4)+4)%4];
}
}

if(x%3==0 && y%3==0)return "GREEN";
if(x%3!=0 && y%3!=0)return "RED";
return "BLUE";
}

};

Share this

Related Posts

Previous
Next Post »