この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 件のコメント:
コメントを投稿