SRM570 DIV2 -Level2

<問題>
①数字の順列が与えられる。
②各数字に対して、ロボットはその数字の分前に進む。進んだ後は右に90度回転する。
③最後の数字まで進む処理をT回繰り返す。
④このとき、最初と最後の位置のマンハッタン距離を返す。

<解き方>
数字の数は最大50個、Tは最大100回なので最大の場合でもO(5000)。
計算量が余裕で間に合うので純粋にシミュレーションを実装する。

<コード>
class RobotHerbDiv2 {

public: int getdist(int T, vector<int> a) {
int x=0,y=0,dir=0;

FORE(h,0,T){
FORE(i,0,a.size()){
if(dir%4==0)y+=a[i];
if(dir%4==1)x+=a[i];
if(dir%4==2)y-=a[i];
if(dir%4==3)x-=a[i];
dir+=(a[i]%4);
}
}
return abs(x)+abs(y);
}

};
このエントリーをはてなブックマークに追加