競プロ解説

今回はバチャでやった問題の反省文です。過去の ABC の問題の解説になります。

問題リンク

https://atcoder.jp/contests/abc161/tasks/abc161_e

問題概要

高橋さんは $N$ 日間のうち $K$ 日を選んで働くことにしました。

  • 働く日どうしの間には $C$ 日以上空ける
  • $S_i$ が x であるときは働かない。

これらの条件を満たすように働くとき、必ず働く日を全て求めてください。

制約

  • $1\le N\le 2\times 10^5$
  • $1\le K\le N$
  • $0\le C\le N$
  • 問題文の条件を満たすように働くことができる

全完黄パフォ~~~!!!
ペナはもう少し縮まったはずなので反省も多いですが、最近の ABC は失敗ばかりだったのでとにかく嬉しいです!

問題リンク

https://atcoder.jp/contests/abc186/tasks/abc186_f

問題概要

縦 $H$ マス、横 $W$ マスのグリッドがあります。また、グリッド上には $M$ 個の障害物があり、$i$ 番目は $(X_i,\ Y_i)$ に置かれています。

障害物にぶつかるまで右または下にずっと移動できる飛車のコマがマス $(1,\ 1)$ にあります。飛車が $2$ 手で到達できるマスの数を求めてください。

制約

  • $1\le H,\ W\le 2\times 10^5$
  • $0\le M\le 2\times 10^5$
  • $(X_i,\ Y_i)\neq (1,\ 1)$
  • $(X_i,\ Y_i)$ は相異なる

JOI 2021 二次予選をバチャしました。難しかったし、納得いく結果が出せませんでしたが、面白い問題でした!

問題リンク

https://atcoder.jp/contests/joi2021yo2/tasks/joi2021_yo2_c

問題概要

$2$ つの街があり、合計 $N$ 個のイベントが行われます。イベント $i$ は街 $P_i$ で開催され、時間は $(S_i,\ S_i+1)$ の間行われます。

JOI 君はこれらのイベントに参加します。どちらの街から始めることができ、それまでに参加したイベント数を $j$ 個とすると、$D+K\times j$ だけ街の間の移動に時間がかかります。

参加できるイベント数の最大値を求めてください。

制約 (満点)

$1\le N\le 200\ 000$
$1\le D\le 10^{12}$
$0\le K\le 10^{12}$
$1\le P_{i} \le 2$
$1\le S_{i} \le 10^{12}$
$S_{i}$ は全て異なる。

やらかし反省録が増えました!!!!!!!!!!!!!!!!!!!

問題リンク

https://atcoder.jp/contests/abc185/tasks/abc185_e

問題概要

$N,\ M$ 要素からなる整数列 $A,\ B$ があります。$A,\ B$ からいくつかの要素をコスト $1$ で取り除くことができます。取り除いたあと、$A,\ B$ の要素数が同じでなくてはなりません。
取り除いたあとの $A,\ B$ について $A_i\neq B_i$ である要素があれば、その個数だけコストが $1$ ずつ上乗せされます。
コストの最小値を求めてください。

制約

$1\le N,\ M\le 1000$
$1\le A_i,\ B_i\le 10^{9}$

ネタ被りが前日に発覚して (4) が (5) になるってどんな偶然なんですか??

問題リンク

https://yukicoder.me/problems/no/1314#

問題概要

N言っちゃダメゲームをします。つまり、先手であるあなたは $0$ から始め、お互いに $[1,\ K]$ の整数を加算したものを言っていき、$N$ 以上の整数を言った人の負けです。
$N$ は今回 $2$ 以上 $M$ の各整数を用います。先手の人は残っているものの中から好きなものを選び、その回の $N$ とします。一度使った数は以降使えなくなります。$2$ 回目以降のゲームは前回負けたプレイヤーが先手をします。

お互いに各ゲームではわざと負けたりしない条件のもと勝つ回数を最大化します。あなたが勝つか負けるか、引き分けになるかを求めてください。

制約

$2\le M,\ K\le 10^{9}$

問題リンク

https://yukicoder.me/problems/no/1313

問題概要

先攻のプレイヤーであるあなたは $0$ から始めます。交互に $[1,\ K]$ のうちのどれかの整数を加算していきます。$N$ 以上の数字、または予め指定された危険な数字を言ってしまうと負けです。

あなたが勝つ場合は最初に宣言して勝てる数字を全て出力してください。あなたが負ける場合は $0$ を出力してください。

制約

  • $N,\ K$ は整数
  • $1\le K\lt N\le 2\times 10^{5}$
  • $|S|=N-1$
  • $S_{i}$ が x のときは $i$ は「危険な数字」で、o のときはそうではない

yukicoder Advent Calendar Contest 2020 の 12/08 出題問題です。

一見すると $N,\ S$ の間に簡単な法則が成り立ちそうですが、どうなんでしょう。面白いですね。

問題リンク

https://yukicoder.me/problems/no/1311

問題概要

ある順列が辞書順で出てくる順番をインデックスと呼びます。また、$S$ 要素で $1$-indexed な順列 $a$ に対して $b$ が $a_{b_{i}}=i (i=1,\ 2,\ \dots,\ s)$ を満たすとき、$b$ を $a$ の逆置換と呼びます。
$S$ 要素の順列の中で、$N$ 番目の順列の逆置換のインデックスを求めてください。

制約

$0\le N\lt S! \lt 2^{64}$
$1\le S\le 20$

yukicoder Advent Calendar Contest 2020 の 12/07 出題問題です。

みんながぐろふぉに出ている中の出題だったため1、FA を狙えないかと思っていましたが残念ながら 3 番目の AC でした。

問題リンク

https://yukicoder.me/problems/no/1310

問題概要

$N$ 要素の $+1,\ -1$ のどちらかからなる数列 $s$ に対して、

$\displaystyle E=-\sum_{i=1}^{N}s_i s_{i+1}$

とします。ただし $s_{N+1}=s_{1}$ です。$2^{|E|}$ の総和を $998244353$ で割った余りを求めてください。

制約

$3\le N\le 2\times 10^{5}$

数学問エスパーが成功したときほど気持ちいい瞬間はありません。

問題リンク

https://atcoder.jp/contests/arc110/tasks/arc110_d

問題概要

長さ $N$ の非負整数列 $A$ があります。長さ $N$、総和 $M$ 以下の非負整数列 $B$ 全てについて、$\displaystyle \prod_{i=1}^{N} \binom{B_i}{A_i}$ の総和を $10^9+7$ で割った余りを出力してください。

制約

$1\le N\le 2000$
$1\le M\le 10^9$
$1\le A_i \le 2000$

yukicoder Advent Calendar Contest 2020 の 12/03 出題問題です。

教育的問題除く ★4 初 AC!(★3.5 の AC が無いのは内緒) ちなみに 16 番目の AC でした。時間はかかったけれど、高難易度の問題をじっくり攻略するのは楽しいです。

おことわりですが、問題を解いた後ぼーっとしながら思考をそのまま書き連ねているので、解説の体を成していないかもしれません(ごめんなさい)。「考察」の内容は解説というよりは私の思考手順をなるべく細かく文章にしたものです。解説記事については、「私と同じ知識を有する人が同じ問題が全く分からなかった際に見て思考を追える文章」をモットーにしているので、いささか回りくどいかもしれません。その代わり、「解法」パートは簡潔に解き方をまとめようと思うので、どうかご容赦ください。
解説をどれくらいの細かさで書くかは本当に人々の思想だと思うんですけれど(ABC の解説を見ているとよく分かります……)、どうしたらいいんでしょうか……。

問題リンク

https://yukicoder.me/problems/no/1306

問題概要

インタラクティブ数当てゲーム。

$\{N,\ N+1,\ \dots ,\ N^2 -1\}$ をちょうど $1$ つずつ含む順列 $A$ があります。この順列を以下のクエリを高々 $1.5\times(N^2-N)$ 回行うことで特定してください。

  • ? i j
    1. $p=\lfloor A_i/N\rfloor-\lfloor A_j/N\rfloor$ とする。つまり、$A_i,\ A_j$ の $N$ の位の差。
    2. $q=\lfloor A_i%N\rfloor-\lfloor A_j%N\rfloor$ とする。つまり、$A_i,\ A_j$ の $1$ の位の差。
    3. もし $p\lt q$ なら $p,\ q$ を swap する。
    4. $p,\ q$ が返される。

数列を特定したら、! に続けて数列を出力してください。

ただし、出力したクエリによって完全に数列を特定できることができない状態で数列を答えても AC とはなりません(adaptive なジャッジ)。

制約

$2\le N\le 50$