このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
タロウはおいしいキウイフルーツのジュースを用意した。彼はそれを0からN-1までの数字がつけられたN個のボトルに注いだ。i番目のボトルの容量はcapacities[i]リットルであり、bottees[i]リットルをそのボトルに注いでいる。そして、彼はボトルのジュースを再分配したいと思っている。このために0からM-1まで番号を付けられた操作を行う。i番目の捜査ではfromId[i]からtoId[i]にジュースを注ぐ。注ぐのをやめるのはfromId[i]の中が空になるか、toId[i]の容量が満杯になるかのどちらか早い方である。すべての操作が終わった時のキウイジュースの量を表したN個の要素からなる整数型の配列を返せ。
public class KiwiJuiceEasy { public int[] thePouring(int[] capacities, int[] bottles, int[] fromId, int[] toId) { for( int i=0 ; i<fromId.length ; i++ ){ int from = bottles[fromId[i]]; // 注げる量 int to = bottles[toId[i]]; int toLeft = capacities[toId[i]] - to; // 注げる量 int pourAmount = Math.min(from, toLeft); // 小さい方を調べて bottles[fromId[i]] -= pourAmount; // 移し替える操作 bottles[toId[i]] += pourAmount; } return bottles; } }
得点は242.44/250、1回のsubmitでシステムテストクリア。