2013年1月16日水曜日

TopCoder SRM453 Div2 250Pts

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

ジョンとブラスはチームスポーツのトーナメントに興味を持っている。彼らは現在のトーナメントの中間順位を調べている。これまでにどの試合が行われたかについては知らない。彼らはトーナメントが以下のルールに基づいて行われたことだけを知っている: 各ゲームは2チームで行われ、一方の勝利または引き分けの結果になる。もしあるチームが試合に勝つと、2ポイントを得て、相手は0ポイントを得る。引き分けの場合には、各チームに1ポイントずつ入る。チームの得点は試合から得たポイントの総和である。どのチームとやりあうかということについての制限はなく、各チームの組で何試合してもよい(0の可能性もある)。

points[]というトーナメントの中間順位を表す整数型の配列が与えられる。i番目の要素はチームiの得点を表す。この順位を作成するのに必要となる試合の最小数を返せ。もしpointsが妥当な状態を表していないのであれば、-1を返すようにせよ。

私の解答はこちら。

public class TheTournamentDivTwo {

 public int find(int[] points) {
  int sum = 0;
  for( int i=0 ; i<points.length ; i++ ){
   sum += points[i];
  }
  if( sum % 2 == 1 ) return -1;
  return sum / 2;
 }

}

得点は246.97、1回のsubmitでシステムテストクリア。-1になるのは、合計点が奇数のときだけである。これは、1試合するたびに合計2点が2チームに入るためである。最小の試合数は合計点/2でよい。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計