2010年11月14日日曜日

TopCoder 練習 SequenceOfCommands(SRM 473 Div1 Easy)

SequenceOfCommands(SRM 473 Div1 Easy)

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

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

  1. public class SequenceOfCommands{  
  2.  public String whatHappens(String[] commands){  
  3.   String ss="";  
  4.   for(String s:commands){  
  5.    ss+=s;  
  6.   }  
  7.   ss=ss+ss+ss+ss;  
  8.   int x=0,y=0,d=0;  
  9.   int[] dx={1,0,-1,0};  
  10.   int[] dy={0,1,0,-1};  
  11.   for(char c:ss.toCharArray()){  
  12.    if(c=='S'){  
  13.     x+=dx[d];  
  14.     y+=dy[d];  
  15.    }  
  16.    else if(c=='L'){  
  17.     d=(d+3)%4;  
  18.    }  
  19.    else{  
  20.     d=(d+1)%4;  
  21.    }  
  22.   }  
  23.   return x==0&&y==0?"bounded":"unbounded";  
  24.  }  
  25. }  

0 件のコメント: