[AtCoder] 第一回日本最強プログラマー学生選手権-予選- B – Kleene Inversion
転倒数を求めるアルゴリズムはマージソートを利用したものや BIT を使ったものがありますが、今回はデータ数が小さいので、\( O(N^2)\) の計算量が間に合います。\( A \) の転倒数を \( s_1 \) とし ...
[AOJ] No. 0622 JOI国のお散歩事情 (Walking in JOI Kingdom)
両者が散歩をしているときに出会う座標を求めます。これは、既に立ち止まっている国民に出会う点ではないことに注意して考えます。どのようなときに、両者が散歩をしているときに出会うかといいうと、東側に進む国 ...
[AtCoder] ABC 002 D – 派閥
派閥の組み合わせはビット列で表現できるので、ビット全探索を用いて最大の派閥に属する議員数を求めます。派閥が成り立つときその派閥のグラフは完全グラフになっている必要があります。完全グラフかどうかの確認は、人間関係を隣 ...
[AtCoder] ABC 138 E – Strings of Impurity
\( t \) に含まれる文字が \( s \) に存在しなければ、条件を満たす整数は存在しません。そうではないとき、\( t \) の \( i \) 文字目 \( t_i \) について、\( s̵ ...
[AtCoder] ABC 138 D – Ki
頂点 \( 1 \) から幅優先探索を行って全ての頂点のカウンターの値を計算します。そのために、頂点 \( i \) が最初のカウンターの値をあらかじめ計算します。最初のカウンターの値とは、ある頂点 \( u \) ...
[AtCoder] ABC 138 C – Alchemist
\( 1 \) 回の合成で使用された食材の価値は半減します。食材 \( i \) が合成に使われた回数を \( a_i \) とし、最終的な価値を \( f \) とすると、
\
となります。 ...
[AtCoder] AGC 037 A – Dividing a String
下記の方針は間違いを含んでいるので追記を見てください。
文字列 \( S \) の部分文字列に、それぞれの隣接する部分文字列が異なるように分割したときの最大値を求めます。このとき、部分文字列は最長でも \( 2 \ ...
[AtCoder] ABC 137 D – Summer Vacation
「明日できることは今日するな」ということで、締め切りから考えていきます。残り \( i \) 日あるとき、まだ請け負っていないアルバイトに対して \( A_j \leq i \) を満たすものの中で報酬が一番大きいものを選びま ...
[AtCoder] ABC 137 C – Green Bin
各文字列を構成する文字の種類と数が同じであれば、同じ文字列を構成できるので、文字列の文字を整列させマップなどでカウントすれば良いです。構成要素が同じ文字列の個数を \( v \) とすると、アナグラムの個数は、
\ ...
[AtCoder] ABC 135 B – 0 or 1 Swap
元の配列と昇順に整列させた配列を比べて、異なる箇所が \( 2 \) 箇所以下であれば、昇順にすることができます。
コード#include <bits/stdc++.h>using namespace std ...