2011年9月24日土曜日

TopCoder SRM251 Div2 250Pts

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

国の大統領になる二人の候補者によるキャンペーンが行われている。新聞の世論調査では、各州で何パーセントの人が各候補者に投票するかということがはっきりしている。候補者1は最後の宣伝をしたく、どこの州に行くべきか知る必要がある。likelihoods[]という文字列型配列が与えられる。各文字列は1つの州を表している。文字列は1と2からなり、1は1に投票する数を、2は2に投票する数を表している。最も1に対する投票率が低い州のインデックスを返せ(インデックスは0から始まる)。もし最低投票率の州が複数あるようであれば、最初に現れた州のインデックスを返すようにせよ。

私の解答はこちら。

public class Elections {
 public int visit(String[] likelihoods) {
  int visit = 0;
  double ratio = 1.0;
  for( int i=0 ; i<likelihoods.length ; i++ ){
   char[] aState = likelihoods[i].toCharArray();
   int n1 = 0;
   for( int j=0 ; j<aState.length ; j++ ){
    if( aState[j]=='1' ) n1++;
   }
   if( (double)n1/aState.length < ratio ){
    visit = i;
    ratio = (double)n1/aState.length;
   }
  }
  return visit;
 }
}

charの配列に1文字ずつに分解するか、Stringのi番目の文字として逐一取り出す方が良いのか悩ましいところ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計