2010年11月14日日曜日

TopCoder 練習 SequenceOfCommands(SRM 473 Div1 Easy)

SequenceOfCommands(SRM 473 Div1 Easy)

■問題
ロボットに命令を与える.命令は,前進,左回転,右回転からなる.与えられた命令列を永遠に実行した場合,ロボットは初期地点から無限に遠ざかるか,そうでないか,を判定せよ.

■解法
ロボットの向きは上下左右の4通りしか無い.よって,命令列を4回実行すれば必ず元の向きを向く.この時初期地点に居なければ,ロボットが無限遠へ行ってしまうのは明らか.

public class SequenceOfCommands{
public String whatHappens(String[] commands){
String ss="";
for(String s:commands){
ss+=s;
}
ss=ss+ss+ss+ss;
int x=0,y=0,d=0;
int[] dx={1,0,-1,0};
int[] dy={0,1,0,-1};
for(char c:ss.toCharArray()){
if(c=='S'){
x+=dx[d];
y+=dy[d];
}
else if(c=='L'){
d=(d+3)%4;
}
else{
d=(d+1)%4;
}
}
return x==0&&y==0?"bounded":"unbounded";
}
}

0 件のコメント: