AtCoder Beginner Contest 206(Sponsored by Panasonic)参加記(~D問題)
引退
A - Maxi-Buying
計算してと比較するだけ。なんか三項演算子の強化版で、「より小さい」「等しい」「より大きい」の3パターンそれぞれの値を返してくれる演算子か関数が欲しくなる。計算結果を整数値で持たないとダメ。計算量は。
B - Savings
公差の等差数列の項目までの和はで求まる。これより解の最大値は程度と予測できるので、一日ずつシミュレーションしていくら溜まっているか確認していけばよい。計算量は。
C - Swappable
「ではない」の条件があるときはその条件を否定してみると数えやすくなることがある。となるようなの組を数えたい。配列の中に整数が個ある場合、そのような組は組ある。これをすべてのについて数え上げ、全体のの組の個数から引けば答えが求まる。配列の中に整数が何個あるか数えるときはmapを使う。計算量は。
D - KAIBUNsyo
という個の組を考える。それぞれの組について、二つの数のどちらかに統一しなければならないが、置き換え操作はすべての組に影響する。ある整数が含まれるすべての組を同時に考える必要がある。
ここで、組の表現をグラフに落とす。各整数を頂点、置換する価値のある2整数の繋がりを辺とする。(これはつまり、各組に含まれる2整数をつないだものになる。)連結成分ごとに独立に考えて良い。一度の操作で隣接する2頂点を1つの大きな頂点にできる。この連結成分が回文の条件を満たすとき、辺が存在するなら自己ループしかありえない。連結成分が個の頂点で構成されているなら、回操作を行って頂点を個にするのが最適である。連結成分の頂点数はDFSで求められる。
これを各連結成分ごとに計算する。式を整理すれば、(頂点の個数)-(連結成分の個数)が答え。計算量は。
感想
太鼓の達人で十段受かったのがうれしすぎてレートが下がってもノーダメ