2018-07-01から1ヶ月間の記事一覧

AtCoder BC103 D: Islands War

問題 https://beta.atcoder.jp/contests/abc103/tasks/abc103_d 解法 最初に(ai, bi)の組み合わせについて、a→bの順番でソートします。 そして、ソート後の組み合わせについて、昇順に橋を落とす範囲を求めていきます。 その場合、i番目とi+1番目について、…

AtCoder BC103 C: Modulo Summation

問題 https://beta.atcoder.jp/contests/abc103/tasks/abc103_c 解法 m mod ai が最大になるのは、mがaiの倍数-1の時で、余りはai-1になる。 よって、mがa1,a2,,,anの最小公倍数-1の時にf(m)は最大になる。 最大値を求めるだけなら最小公倍数自体は求める必…

AtCoder BC103 B: String Rotation

問題 https://beta.atcoder.jp/contests/abc103/tasks/abc103_b 解法 文字列の長さが最大100と短いため、全パターンを確かめて比較するだけでOK 実装 s = gets.chomp t = gets.chomp n = s.size n.times do |i| ss = s[i, n-i] + s[0, i] if ss == t puts "Y…

AtCoder GC020 A: Digit Sum 2

問題 https://beta.atcoder.jp/contests/agc020/tasks/agc020_a 解法 各自がとるべき戦略を考えるにあたり、まずはどのような状態で勝敗が確定するかを考えます。 勝敗が確定するのは、以下のように片方が端っこに追いやられた状態で、次のターンがまわって…

AtCoder BC098 C: Attention

問題 https://abc098.contest.atcoder.jp/tasks/arc098_a 解法 ある人をリーダーに選んだ場合、 西から東に向きを変える人の数 = 選んだ人より西の人の内、西を向いている人の数 東から西に向きを変える人の数 = 選んだ人より東の人の内、東を向いている人…

AtCoder BC098 B: Cut and Count

問題 https://abc098.contest.atcoder.jp/tasks/abc098_b 解法 文字列のサイズが最大でも100なので、全ての切断箇所のパターンで「どちらにも含まれる文字」の種類を数え上げれば解けます。 Rubyの場合、配列の「&」をとると共通部分が求められるので、実装…