ABC146
A
曜日を格納した配列を作っておいて、入力と一致したら対応する値を出力すればよいです。
Submission #8612614 - AtCoder Beginner Contest 146
B
各文字ごとに丁寧にN回インクリメントすればよいです。
Submission #8612571 - AtCoder Beginner Contest 146
C
を固定します。このとき、桁の整数であって、値が以下である整数を買うことができます。そのような整数のうち、最大のものが答えの候補です。は1から10まで試せばよいので間に合います。(19まで試したしまったけど...。)
Submission #8612542 - AtCoder Beginner Contest 146
D
まずの値がいくつになるかを考えます。次数がの頂点があったとき、その頂点に関する条件を満たすためにはでなければなりません。つまり、次数の最大値がの下界です。逆にが次数の最大値であるような辺の塗り方が作れることを示します。根を1つ決めてdfsしながら順に塗っていきます。頂点に来たとき、の親との間にある辺の色を覚えておきます(根の場合は適当に関係ない値にしておく)。この色以外を使っての子との辺を塗らないといけませんが、の子の数は以下であり、色使っていいのでそれらを好きに塗ればよいです。あとは実装力勝負でしょう。
Submission #8612498 - AtCoder Beginner Contest 146
E
難しいと思いました。区間の和を、その長さをとすると、ある自然数があって、が成り立つということが条件です。を移項するとで、がで割り切れればよいです。ここでが成り立つので、新たな数列をで定義します。すると、この問題は、「数列について、その総和がで割り切れるもののうち、長さが未満である連続部分列の数を求めよ」と言い換えられます。これはの累積和をとると、のとき、がなので、からの和のは0です。従って、が同じをまとめておいて、あとはその差が未満である組の数を数えればよいです。
Submission #8621948 - AtCoder Beginner Contest 146
F
最短の回数を求めるには、:までの最短回数、というdpが思い浮かびます。愚直にやるとですが、遷移をこれはセグ木で高速化できます。ところが、今回は辞書順最小の移動手順を求められているので、を小さい方から埋めると困ってしまいます。しかし、を大きいほうから埋めるとどうでしょうか?
まで埋まった状態から、辞書順最小の移動手順を求めます。今0にいるときに、条件を満たすような位置は「」を満たすような最小のです。これはセグ木を用いた二分探索によって見つけることができます。この操作をにたどり着くまで繰り返せばよいです。全体でかけてもいいですし、「セグ木上の二分探索」によっての計算量を達成することも可能です。