メモ帳がわり

個人的なメモを残します。主に競プロ

実装方法

【ABC147】D - Xor Sum 4

atcoder.jp 解法 問題文通り実装してもO(N2)で間に合わない。 XOR演算を繰り返すため、ビットごとに考えたくなる。 そこで位ごとに、ビットが立っているかどうかをA[i]すべてで調べ、いくつビットが立っているかを計算することにする。 A[i] ≦ 260 なので、6…

【C++】set, multisetに関するメモ

適当に追加していきます。 最大値の取り方 set<int> st; st.insert(1); st.insert(2); auto mx = st.rbegin(); // 最大値へのイテレータ cout << *mx << endl; // 2 st.erase(mx); // 最大値を削除する cout << *mx << endl; // 1 multisetで一つだけ要素を消去す</int>…

【ABC137】D - Summer Vacation

atcoder.jp 解法 DPがしたくなる見た目をしているが、O(NM)になって間に合いそうにない。 あまり気が乗らないのだが、貪欲法で解けないかどうか考えてみることにする。 報酬を最大化したいので、なるべく報酬が大きい労働を優先的に選択したくなる。 かつ、…

【典型90問】081 - Friendly Group(★5)

問題リンク 解法 体重・身長の取る範囲が小さいということがとても気になる。 これをどうにか使えないかと考えてみると、二次元平面上に(身長, 体重)のようにプロットして、何らかの方法で条件を満たすそれぞれの範囲内にいくつ点が存在するかを高速に計算で…

【C++】N進数→10進数, 10進数→N進数

N進数→10進数の変換 Nの部分を変換して使いましょう。 numは任意のN進数です。 powはdouble型などを返すので、誤差に注意。(誤差が気になる場合は自作累乗関数を作ろう。) string str = to_string(num); long long n = 0; long long sz = str.size(); for (i…