WCPC
AtCoder

ARC224--参加記

2026年7月12日 T Twil3akine

前回の参加記(ARC219)

はじめに

おはようございます。Twil3akineです。

初めてのARCでしっかり A, B, C, E の4問を解いてちゃんと勝ちました。気持ちがいいです。

[ARC224--でしっかり勝った図]


結果サマリ

問題参加者名タイム言語
AShoboiNamae5:09C++
BShoboiNamae14:16C++
CShoboiNamae37:37C++
D---
Ensubaru94:18Java
F---
G---

今週の出題

A問題

問題ページ: A - Attach 00

問題文を表示

【問題文】

以下の 22 つの条件を満たす正の整数 nn の最小値を求めてください。

  • nnKK の倍数である。

  • nn の十進表記には、022 文字以上連続して現れる。 TT 個のテストケースが与えられるので、それぞれについて答えを求めてください。

【制約】

  • 1T1051 \leq T \leq 10^5

  • 1K1091 \leq K \leq 10^9

  • 入力はすべて整数

【入力】

入力は以下の形式で標準入力から与えられる。ここで caseicase_iii 個目のテストケースを意味する。

Tcase1caseT T \\ case_1 \\ \vdots \\ case_T \\

各テストケースは以下の形式で与えられる。

K K

【出力】

TT 行出力せよ。ii 行目には ii 個目のテストケースの答えを出力せよ。

K×100K \times 100 は必ず条件を満たします。

ということは、それまで全探索すれば良いです。

1ケースにつき最大100個の倍数を調べればよく、それぞれの桁数は最大12桁です。 したがって、T105T \le 10^5 より、計算量はおよそ 12×100×105=1.2×10812 \times 100 \times 10^5 = 1.2 \times 10^8 となり、22 秒以内に解くことができます。


B問題

問題ページ: B - Adjacent Tiles

問題文を表示

【問題文】

同じ大きさの正方形のタイル NN 枚を、平面上に重ならないように配置します。

このとき、一辺を完全に共有している相異なるタイルのペアの個数は最大でいくつになりますか? ただし、タイルのペア (a,b)(a,b) が一辺を完全に共有するとは、 aa のある辺と bb のある辺が完全に一致することをいいます。 TT 個のテストケースが与えられるので、それぞれについて答えを求めてください。

【制約】

  • 1T2×1051 \le T \le 2 \times 10^5

  • 1N10181 \le N \le 10^{18}

  • 入力はすべて整数

【入力】

入力は以下の形式で標準入力から与えられる。ここで caseicase_iii 個目のテストケースを意味する。

Tcase1case2caseT T \\ case_1 \\ case_2 \\ \vdots \\ case_T \\

各テストケースは以下の形式で与えられる。

N N

【出力】

TT 行出力せよ。ii 行目には ii 個目のテストケースの答えを出力せよ。

X×YX \times Y の大きさの長方形が持つ共有する辺の数は X(Y1)+Y(X1)X(Y-1)+Y(X-1) 本です。

一辺の長さが nn の正方形の場合は、2n(n1)2n(n-1) 本になります。

これは nn について単調増加するので、まず作れる最大の正方形を作るのが良さそうです。

そこで、s=Ns=\lfloor\sqrt N\rfloor とします。

次に、正方形からそのまま一辺を伸ばすことを考えます。q=Nsq=\left\lfloor\frac Ns\right\rfloor とすると、まず s×qs\times q の長方形を作れます。

この長方形が持つ共有する辺の数は、s(q1)+q(s1)s(q-1)+q(s-1) 本です。

残っているタイルの枚数を r=Nsqr=N-sq とします。

r>0r>0 の場合、長方形の横にタイルを一列追加します。

最初のタイルは長方形と一辺を共有し、それ以降のタイルは長方形と一辺、直前に追加したタイルと一辺を共有します。

したがって、追加される共有辺の数は 1+2(r1)=2r11+2(r-1)=2r-1 本です。

以上より、答えは s(q1)+q(s1)+{0(r=0)2r1(r>0)s(q-1)+q(s-1)+ \begin{cases} 0 & (r=0) \\ 2r-1 & (r>0) \end{cases} となります。


C問題

問題ページ: C - Ascending Labels

問題文を表示

【問題文】

NN 頂点 MM 辺の連結な単純無向グラフが与えられます。 頂点には 1,2,,N1,2,\ldots,N の番号が付けられており、ii 個目の辺は頂点 UiU_i と頂点 ViV_i を結びます。 以下の条件をすべて満たす整数列 A=(A1,A2,,AN)A=(A_1,A_2,\ldots,A_N)11 つ構築してください。

  • すべての頂点 vv について、0AvN0 \le A_v \le N である。

  • A1=0A_1=0 である。

  • 頂点 11 以外のすべての頂点 vv について、vv に隣接する頂点 ww のうち Aw=Av1A_w=A_v-1 を満たすものがちょうど 11 つ存在する。

なお、本問題の制約下で、上記の条件をすべて満たす整数列が少なくとも 11 つ存在することが証明できます。

また、条件を満たす整数列が複数存在する場合、どれを出力しても正答とみなされます。

TT 個のテストケースが与えられるので、それぞれについて答えを求めてください。

【制約】

  • 1T3×1041 \le T \le 3 \times 10^4

  • 1N3×1051 \le N \le 3 \times 10^5

  • N1M3×105N-1 \le M \le 3 \times 10^5

  • 1Ui<ViN1 \le U_i < V_i \le N

  • iji \neq j ならば (Ui,Vi)(Uj,Vj)(U_i,V_i) \neq (U_j,V_j)

  • 与えられるグラフは連結

  • ひとつの入力における NN の総和は 3×1053 \times 10^5 以下

  • ひとつの入力における MM の総和は 3×1053 \times 10^5 以下

  • 入力はすべて整数

【入力】

入力は以下の形式で標準入力から与えられる。ここで caseicase_iii 個目のテストケースを意味する。

Tcase1case2caseT T \\ case_1 \\ case_2 \\ \vdots \\ case_T \\

各テストケースは以下の形式で与えられる。

N  MU1  V1U2  V2UM  VM N \; M \\ U_1 \; V_1 \\ U_2 \; V_2 \\ \vdots \\ U_M \; V_M \\

【出力】

TT 行出力せよ。ii 行目には ii 個目のテストケースの答えを出力せよ。 各テストケースについて、条件を満たす整数列 AA を以下の形式で出力せよ。

A1  A2    AN A_1 \; A_2 \; \dots \; A_N

見た感じ、BFSで通りそうだったのでまずBFSで出してみました。嘘解法でした。

BFSの距離を AvA_v とすると、距離が一つ小さい隣接頂点が複数存在する場合があるため、条件を満たしません。

そこで、頂点 11 を根としてDFS木を作り、各頂点のDFS木上の深さを AvA_v とします。

頂点 vv の親は深さがちょうど一つ小さいため、Aw=Av1A_w=A_v-1 を満たします。

また、無向グラフのDFSにおいて、DFS木に含まれない辺は祖先と子孫を結ぶ辺になります。

vv より深さがちょうど一つ小さい祖先は、vv の親しか存在しません。

したがって、Aw=Av1A_w=A_v-1 を満たす隣接頂点は、DFS木上の親のちょうど一つになります。

よって、ただのDFSを実装するだけで良いです。


D問題

問題ページ: D - Angst for All Pairs

解けなかったので割愛させてもらいます。

条件文が本当に何を言っているのか分かりませんでした。悲しい。


E問題

問題ページ: E - ABC|AB|A

問題文を表示

【問題文】

A, B, C からなる文字列 SS が与えられます。

以下の操作を 00 回以上何回でも行えます。

  • SS から A または AB または ABC である部分文字列 (連続部分列) を 11 つ選択して削除する。残った文字は順序を保って連結される。

最終的な SS の長さとして達成可能な最小値を求めてください。

TT 個のテストケースが与えられるので、それぞれについて答えを求めてください。

【制約】

  • TT11 以上 10510^5 以下の整数

  • SSA, B, C からなる長さ 11 以上 10610^6 以下の文字列

  • ひとつの入力における S|S| の総和は 10610^6 以下

【入力】

入力は以下の形式で標準入力から与えられる。ここで caseicase_iii 個目のテストケースを意味する。

Tcase1case2caseT T \\ case_1 \\ case_2 \\ \vdots \\ case_T \\

各テストケースは以下の形式で与えられる。

S S

【出力】

TT 行出力せよ。ii 行目には ii 個目のテストケースの答えを出力せよ。

ずっとD問題の読解に齧り付いていたのですが、ふとE問題を一切見ていないことに気付き、見に行くと簡単すぎてとても悲しくなりました。

最初からこっちを見ておけば…

文字列を後ろから見て、まだ削除されていない文字をスタックで管理します。

  1. B, C はスタックに追加します。
  2. A が来たら、スタックの先頭が B なら AB として削除し、さらに次が C なら ABC として削除します。A はスタックに追加しません。

最後にスタックに残った文字数が答えです。


最後に

今回のARCはなかなかの早解き回で、 序盤にはAtCoder Predictorも壊れていて焦りましたが、しっかり勝つことができたので良かったです。

ARCはABCに比べて、問題に対する考察の比重が多めなので割と好きです。

それでは。

← 活動記事一覧に戻る