このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
X、Y、Pという3つの正の整数が与えられる。a、bを正の整数としてa*X+b*YがPで割り切れるとき、a+bを最小にするaとbの組合せを求め、その値を求めよ。
私の解答はこちら。
public class TheEquation { public int leastSum(int X, int Y, int P) { int min = Integer.MAX_VALUE; for( int i=1 ; i<=2*P ; i++ ){ for( int j=1 ; j<=2*P ; j++ ){ if( (i*X+j*Y) % P == 0 ){ min = Math.min(min, i+j); } } } return min; } }
得点は243.63/250、1回のsubmitでシステムテストクリア。当日の正解率は約82%。ヒントにより探索範囲が分かるので、簡単でした。解答が2*P以下になるということ(P*X+P*YがPで割り切れるから)なので、全探索でゴリ押し。
0 件のコメント:
コメントを投稿