はじめに
おはようございます。Twil3akineです。
初めてのARCでしっかり A, B, C, E の4問を解いてちゃんと勝ちました。気持ちがいいです。
![[ARC224--でしっかり勝った図]](/_astro/arc224-img1.DI6N92un_2kHveh.webp)
結果サマリ
- ARC224
- WCPC参加人数: 6人
- 各問題の最速解答者(ペナルティなし):
| 問題 | 参加者名 | タイム | 言語 |
|---|---|---|---|
| A | ShoboiNamae | 5:09 | C++ |
| B | ShoboiNamae | 14:16 | C++ |
| C | ShoboiNamae | 37:37 | C++ |
| D | - | - | - |
| E | nsubaru | 94:18 | Java |
| F | - | - | - |
| G | - | - | - |
今週の出題
A問題
問題ページ: A - Attach 00
問題文を表示
【問題文】
以下の つの条件を満たす正の整数 の最小値を求めてください。
-
は の倍数である。
-
の十進表記には、
0が 文字以上連続して現れる。 個のテストケースが与えられるので、それぞれについて答えを求めてください。
【制約】
-
-
-
入力はすべて整数
【入力】
入力は以下の形式で標準入力から与えられる。ここで は 個目のテストケースを意味する。
各テストケースは以下の形式で与えられる。
【出力】
行出力せよ。 行目には 個目のテストケースの答えを出力せよ。
は必ず条件を満たします。
ということは、それまで全探索すれば良いです。
1ケースにつき最大100個の倍数を調べればよく、それぞれの桁数は最大12桁です。 したがって、 より、計算量はおよそ となり、 秒以内に解くことができます。
B問題
問題ページ: B - Adjacent Tiles
問題文を表示
【問題文】
同じ大きさの正方形のタイル 枚を、平面上に重ならないように配置します。
このとき、一辺を完全に共有している相異なるタイルのペアの個数は最大でいくつになりますか? ただし、タイルのペア が一辺を完全に共有するとは、 のある辺と のある辺が完全に一致することをいいます。 個のテストケースが与えられるので、それぞれについて答えを求めてください。
【制約】
-
-
-
入力はすべて整数
【入力】
入力は以下の形式で標準入力から与えられる。ここで は 個目のテストケースを意味する。
各テストケースは以下の形式で与えられる。
【出力】
行出力せよ。 行目には 個目のテストケースの答えを出力せよ。
の大きさの長方形が持つ共有する辺の数は 本です。
一辺の長さが の正方形の場合は、 本になります。
これは について単調増加するので、まず作れる最大の正方形を作るのが良さそうです。
そこで、 とします。
次に、正方形からそのまま一辺を伸ばすことを考えます。 とすると、まず の長方形を作れます。
この長方形が持つ共有する辺の数は、 本です。
残っているタイルの枚数を とします。
の場合、長方形の横にタイルを一列追加します。
最初のタイルは長方形と一辺を共有し、それ以降のタイルは長方形と一辺、直前に追加したタイルと一辺を共有します。
したがって、追加される共有辺の数は 本です。
以上より、答えは となります。
C問題
問題ページ: C - Ascending Labels
問題文を表示
【問題文】
頂点 辺の連結な単純無向グラフが与えられます。 頂点には の番号が付けられており、 個目の辺は頂点 と頂点 を結びます。 以下の条件をすべて満たす整数列 を つ構築してください。
-
すべての頂点 について、 である。
-
である。
-
頂点 以外のすべての頂点 について、 に隣接する頂点 のうち を満たすものがちょうど つ存在する。
なお、本問題の制約下で、上記の条件をすべて満たす整数列が少なくとも つ存在することが証明できます。
また、条件を満たす整数列が複数存在する場合、どれを出力しても正答とみなされます。
個のテストケースが与えられるので、それぞれについて答えを求めてください。
【制約】
-
-
-
-
-
ならば
-
与えられるグラフは連結
-
ひとつの入力における の総和は 以下
-
ひとつの入力における の総和は 以下
-
入力はすべて整数
【入力】
入力は以下の形式で標準入力から与えられる。ここで は 個目のテストケースを意味する。
各テストケースは以下の形式で与えられる。
【出力】
行出力せよ。 行目には 個目のテストケースの答えを出力せよ。 各テストケースについて、条件を満たす整数列 を以下の形式で出力せよ。
見た感じ、BFSで通りそうだったのでまずBFSで出してみました。嘘解法でした。
BFSの距離を とすると、距離が一つ小さい隣接頂点が複数存在する場合があるため、条件を満たしません。
そこで、頂点 を根としてDFS木を作り、各頂点のDFS木上の深さを とします。
頂点 の親は深さがちょうど一つ小さいため、 を満たします。
また、無向グラフのDFSにおいて、DFS木に含まれない辺は祖先と子孫を結ぶ辺になります。
より深さがちょうど一つ小さい祖先は、 の親しか存在しません。
したがって、 を満たす隣接頂点は、DFS木上の親のちょうど一つになります。
よって、ただのDFSを実装するだけで良いです。
D問題
問題ページ: D - Angst for All Pairs
解けなかったので割愛させてもらいます。
条件文が本当に何を言っているのか分かりませんでした。悲しい。
E問題
問題ページ: E - ABC|AB|A
問題文を表示
【問題文】
A, B, C からなる文字列 が与えられます。
以下の操作を 回以上何回でも行えます。
- から
AまたはABまたはABCである部分文字列 (連続部分列) を つ選択して削除する。残った文字は順序を保って連結される。
最終的な の長さとして達成可能な最小値を求めてください。
個のテストケースが与えられるので、それぞれについて答えを求めてください。
【制約】
-
は 以上 以下の整数
-
は
A,B,Cからなる長さ 以上 以下の文字列 -
ひとつの入力における の総和は 以下
【入力】
入力は以下の形式で標準入力から与えられる。ここで は 個目のテストケースを意味する。
各テストケースは以下の形式で与えられる。
【出力】
行出力せよ。 行目には 個目のテストケースの答えを出力せよ。
ずっとD問題の読解に齧り付いていたのですが、ふとE問題を一切見ていないことに気付き、見に行くと簡単すぎてとても悲しくなりました。
最初からこっちを見ておけば…
文字列を後ろから見て、まだ削除されていない文字をスタックで管理します。
B,Cはスタックに追加します。Aが来たら、スタックの先頭がBならABとして削除し、さらに次がCならABCとして削除します。Aはスタックに追加しません。
最後にスタックに残った文字数が答えです。
最後に
今回のARCはなかなかの早解き回で、 序盤にはAtCoder Predictorも壊れていて焦りましたが、しっかり勝つことができたので良かったです。
ARCはABCに比べて、問題に対する考察の比重が多めなので割と好きです。
それでは。