SRM501
はいはい。
今終わりましたよ〜♪
では、報告です。
250
今回はすべての問題において綺麗な数列の好きな狐が主人公だった。
というわけでまずは与えられた配列に何かの数字をたしたら綺麗な数列になるか?数列は整数倍に増えていくものか等間隔に増えていくか。
それで一つ数たしたときに綺麗な配列になるのが何通りか答えろみたいな。
とりあえず半分とったのでさらします。
public class FoxProgression { public int theCount(int[] seq) { boolean bol1 = false; boolean bol2 = true; boolean bol3 = true; int tmp = 0; if (seq.length == 1) { bol1 = true; } else if (seq.length == 2) { if (seq[0] >= seq[1]) { bol3 = false; } } else { for (int i = 0; i < seq.length-1; i++) { if (i != 0 && tmp != seq[i+1]-seq[i]) { bol2 = false; break; } tmp = seq[i+1]-seq[i]; } for (int i = 0; i < seq.length-1; i++) { if (i != 0 && tmp != seq[i+1]/seq[i]) { bol3 = false; break; } else if (seq[1]<seq[0]) { bol3 = false; break; } tmp = seq[i+1]/seq[i]; } } int ans = 0; if (bol2) { ans++; } if (bol3) { ans++; } if (bol1) { ans = -1; } return ans; } }
まだ、アルゴリズムはなれてないからとりあえず配列など多用しました。
考えてから最良のコードをかけるようになっていきたいね。
500
こんどはAとBふたつの動きがあってAはスコアをどんどん足していって、Bはスコアをどんどんかけていくみたいな。
なんか思いつきで書いてみたもの、バグでまくり(苦笑)
public class FoxPlayingGame { public double theMax(int nA, int nB, int paramA, int paramB) { double scoreA = paramA / 1000.0; double scoreB = paramB / 1000.0; double ans = 0.0; double resultA = scoreA*nA; double resultB = Math.pow(scoreB, nB); if ((resultA > 0 || resultB > 0) && (resultA < 0 || resultB < 0)) { ans = resultA*resultB; } else if ((nB % 2 != 0 || scoreB < 0 || scoreA > 0) && (nB % 2 == 0 || scoreB < 0 || scoreA < 0)) { ans *= scoreB; for (int i = 0; i < nA; i++) ans += scoreA; for (int i = 0; i < nB-1; i++) ans *= scoreB; } else { ans = resultA; } return ans; } }
チャレンジフェイズで鴨になりました。
1000
こちらも鴨になった問題。
250をちょっと改良して数字をあてはめるところに-1がはいった配列で同じ事やるらしいです。
時間も時間だったので、気分だけでもよくしたくてどんな答えにも0を返すコードで997点w
チャレンジフェイズで落とされて…
総合
結果、142点ぐらいでシステムテスト入りました。
p.s.ちょっとコレ書いてる間に地震と雷きて少々ビビリ気味w