2018-01-01から1年間の記事一覧

AtCoder BC097 D: Equals

問題 https://abc097.contest.atcoder.jp/tasks/arc097_b 解法 最初、貪欲に操作をシミュレートして解こうと思ったのですが、組み合わせが果てしなくあることに気づき早々に断念。 例題の解き方を眺めているうちに、各操作のグルーピングがポイントであるこ…

AtCoder BC097 C: K-th Substring

問題 https://abc097.contest.atcoder.jp/tasks/abc097_c 解法 最初に問題を見たときは、長さ5000以下の文字列の部分文字列なんていっぱいあるし、これ本当に300点?って思ったのですが、Kが5以下に抑えられているので、高々Kまでの長さの部分文字列を全て列…

AtCoder BC097 B: Exponential

問題 https://abc097.contest.atcoder.jp/tasks/abc097_b 解法 bpがX以下になる組み合わせについて考えます。 これはbについては1〜X、pについては2〜Xの組み合わせが考えられ、これは2重ループのO(N2)で求めることが出来ます。 ただし、pについては計算結果…

AtCoder GC023 B: Find Symmetries

問題 https://agc023.contest.atcoder.jp/tasks/agc023_b 解法 まず、初期状態で「よい盤面」なものについて考える。 例えば、N=3の場合、以下のような盤面が「よい盤面」である。 a b c b d e c e f これを右方向に1、下方向に1ずらすと f c e c a b e b d …

AtCoder GC023 A: Zero-Sum Ranges

問題 https://agc023.contest.atcoder.jp/tasks/agc023_a 解法 最初に問題を見て、これ本当に200点?って思うくらい悩んだ。 とりあえず、累積和をとってみる。 例えば、サイズ4の数列:{a1 a2 a3 a4}の累積和を考える。 S1 = a1 S2 = a1 + a2 S3 = a1 + a2 …

GCJ 2017 Qualification Round B: Tidy Numbers

問題 与えられた整数Nについて、N以下で数字が左から昇順に並ぶ最大の数を求める。 例えば、132であれば、129が132以下で数字が1,2,9と昇順に並ぶ最大の数となる。 https://code.google.com/codejam/contest/3264486/dashboard#s=p1 方針 Nから順にデクリメ…

AtCoder RC093 C: Traveling Plan

問題 https://arc093.contest.atcoder.jp/tasks/arc093_a 解法 観光スポットに行かないケースを毎回計算していると、O(n2)の計算量になってしまいます。 そこで以下のように考えます。 観光地が5カ所の場合、全ての観光地に行くケースの総距離は、 $$総距離 …

AtCoder RC089 C: Traveling

問題 https://arc089.contest.atcoder.jp/tasks/arc089_a 解法 時刻が1進む毎に上下左右のいずれかに1進めるので、次の場所に進むことを考えると ・次の場所との距離(X座標とY座標の差の絶対値の和)が時刻の差に等しい がまず最もシンプルな条件になります…

AtCoder RC091 C: Flip,Flip, and Flip......

問題 https://arc091.contest.atcoder.jp/tasks/arc091_a 解説 実際にカードの反転処理をシミュレートして解こうとすると、計算量がO(N2)になってしまって現実的では無いです。 そのため、計算で解くことにします。 まず基本的な考え方です。最初はカードは…

GCJ 2016 Qualification Round B: Revenge of the Pancakes

問題 と - からなる文字列Sが与えられる。以下の操作を繰り返して、+ のみの文字列に変換するための最小回数を求める。 ・文字列Sのi番目までの+と-を反転させて、なおかつ、逆順にする。 例: 文字列Sが ++--+ でi=3の場合、++- を反転(--+)して逆順(+--…

GCJ 2016 Qualification Round A: Counting Sheep

問題 与えられた非負整数Nについて、N×1,N×2,…とNの倍数をあげていく。その数の10進表記で見た場合の桁が0~9全て出そろった時の最後の数を出力する。(そろわない場合は"INSOMNIA"を出力) 例:N=2の場合、2×1=2,2×2=4,…,2×35=70,…,2×44=88,2×45=90 で0~9が…