1104-Where's Your Robot?
iostreamをインクルードすればstringはインクルードしなくても大丈夫ということに気づく。
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1104
問題概要
最初にロボットのいる空間の大きさが与えられる。
次にロボットの移動の命令が与えられるので最終的に居る位置を答える。
命令は
FORWARD k…kマス進む
BACK k…kマス後ろに進む
LEFT…左を向く
RIGHT…右を向く
STOP…命令終了
の5つで、初期状態ではマス(1、1)で上向きになっている。
また、壁があって進めない場合はその位置に留まることになっている。
詳しいことは問題文の最後にある図参照。
考え方
現在の座標をx,y、向きをdで表わしてシミュレートする。
実装(C++)
#include <iostream> using namespace std; int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},x,y,d,w,h,t; string cmd; int main() { for(;(cin>>w>>h),w;){ x=y=d=0; for(;cin>>cmd;){ if(cmd=="STOP"){ cout<<x+1<<" "<<y+1<<endl; break; }else if(cmd=="FORWARD"){ cin>>t; x+=dx[d]*t;y+=dy[d]*t; }else if(cmd=="BACKWARD"){ cin>>t; x+=dx[d^2]*t;y+=dy[d^2]*t; }else if(cmd=="LEFT") d--; else d++; d=(d+4)%4; if(x<0)x=0; if(y<0)y=0; if(x>=w)x=w-1; if(y>=h)y=h-1; } } return 0; }