2012年5月14日月曜日

TopCoder SRM385 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。

ロシア人は制限速度を守らないという噂がある。というのも、ロシアでは暗黙的に速度制限がかけられていることがあるためである。 より具体的には、市街の速度制限は60km/hであるのだが、そのようなことを運転者に思い出させるような標識はない。同様に、市街の速度制限は90km/hである。 速度制限は30や95といった標識によって明示的に特定できる。道路標識には、「標準的な速度制限領域」という標識がある。これは、その場所における標準的な速度制限になるということを意味している。標識は運転手に速度制限を思い出されることに用いられ、連続的にそのような標識をみかけることもある。 要は、速度制限が変わる次のような標識に注意する必要がある。

  • X(数字) - 速度制限がX km/hということを明示している
  • 標準的な速度制限に戻ることを示す標識 - 市街なら60、市外なら90
  • 市街と市外を分ける境界 - 速度制限がそこを境に変わるということ

signsという標識を表す文字列が与えられたとき、現在の速度制限が何km/hになっているかを返すメソッドを作成せよ。signs[]の中身は"50"のように数字が中身に入る場合、"default"という、その場所における標準速度制限に戻す場合、"city"という領域の境界(市街から市外、市外から市街のどちらも含む)である場合の3つがある。あなたは市街の中から運転を始め、特別な速度制限のある市外へと出ることになるものとする。

私の解答はこちら。

public class RussianSpeedLimits {

 public int getCurrentLimit(String[] signs) {
  int ret = 0;
  boolean inCity = true; // 現在市街にいればtrue、市外ならfalse
  for( int i=0 ; i<signs.length ; i++ ){
   if( signs[i].equals("default") ){
    ret = inCity ? 60 : 90; // その場所における初期状態に戻す
   }else if( signs[i].equals("city") ){
    inCity = inCity ? false : true; // 位置情報を変えて
    ret = inCity ? 60 : 90; // 速度の上限を変更する
   }else{
    ret = Integer.parseInt(signs[i]); // 数値が含まれている場合
   }
  }
  return ret;
 }

}

得点は231.05/250、1回のsubmitでシステムテストクリア。中央値は約201点。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計