AtCoder Beginner Contest 175お疲れ様でした!
公式ページ
今回の自分の書いたコードはこちら
結果はA-CまでACできました。DもEもなんか難しかった・・・
以下簡単に解説します。
##問題A
文字列が最大で何回連続しているかを答える問題。
String.charAt()
で指定文字取得して、愚直に条件文書きました。
##問題B
3辺の長さが与えられて、それが三角形になるかどうかを出力する問題。
注意点として、同じ長さの辺は使用してはいけないことです。
計算量は気にせず3重ループでも十分間に合います。
3重ループ内はこんな感じ。まず辺の長さが同じものが無いかをチェックし、三角形かどうかを判定しました。
if (first == second || second == third || third == first) {
continue;
}
if (isTriangle(first, second, third)) {
count++;
}
三角形かどうかの判定は以下のように行いました
public static boolean isTriangle(int i, int j, int k) {
int max = Math.max(i, j);
max = Math.max(max, k);
return i + j + k - max > max;
}
##問題C
数直線上のXからK回Dだけ移動して、原点にどれだけ最も近い位置を出力する問題。
ちょっと図を書いてみると、Xに比べてKとDが小さいときはひたすら原点に向かって移動すればよく、
そうでない場合は偶数か奇数かで値が決まることが分かります。
ある程度Xに比べてKかDが十分大きいと、原点のまわりでうろちょろするようなイメージです。
また、X, K, D全て大きいので、むやみに掛け算を使わないのがポイントです。(オーバーフローしてしまいます。)
まずは、Xが十分大きいときの分岐はこのように書けます。
if (x / d > k) {
print(x - d * k);
return;
}
そうでない場合はx%d
かd-x%d
を偶奇で判別して出力しましょう。
また、Xは負の値も取りうるので注意です。これでめちゃくちゃ手間取りました・・・
##問題D
(後日追記)
##問題E
(後日追記)
感想
20分寝坊しちゃったのもあり、最低パフォーマンス(592)でした、、
レーティングも4回連続低下し、930にorz
D問題とE問題はしっかり復習して、後日きちんと更新してソースコードも書きます・・・!
くやしー!
最後まで読んでくださり、ありがとうございます!