WCPC
AtCoder WCPC

ABC463参加記

2026年6月20日 C Caffeineholic

前回の参加記(ABC462回)

はじめに

こんにちは。少し疲れ顔のCaffeineholicがお送りするABC463振り返り記事です。

タスクが溜まっていても、言語の実行速度で足蹴にされても、靴の中底に点字ブロックを敷いたままでは渡れる道路も渡れませんよね。足踏みせずに今週もrated参加し、ABCEの4完でした。E問題に蹴り込むことができましたが、やはり5完への道のりの長さを実感しています。


結果サマリ

各問題の最速解答者 (ペナルティ無し)

問題参加者名タイム言語
Ansubaru0:28Java
Bkotomiko2:05C++
Cnsubaru8:34Java
DShoboiNamae50:52C++
ECaffeineholic71:10Python
F---
G---

今週の出題

A問題

問題文を表示

問題文XX ピクセル、縦 YY ピクセルの画像があります。

横の長さと縦の長さの比が 161699 であるか、すなわち X:Y=16:9X:Y=16:9 であるかを判定してください。

制約 - 1X10001 \le X \le 1000

  • 1Y10001 \le Y \le 1000
  • 入力はすべて整数

入力 入力は以下の形式で標準入力から与えられる。

XX

YY

出力 横の長さと縦の長さの比が 161699 ならば Yes を、そうでないならば No を出力せよ。

A問題はいつも通りの難易度でした。計算誤差を過剰に怖がるなら、割り算するより 9 * X == 16 * Y かどうかを判定するのが良さそうですね。

B問題

問題文を表示

問題文 高橋君は列車の座席を予約しようとしています。

高橋君が予約する候補としている列車は NN 本あり、列車 1,2,,N1, 2, \dots, N と番号が付けられています。いずれの列車も座席は 55 列からなり、それぞれ A 列、B 列、C 列、D 列、E 列と呼ばれています。

各列車の現在の空席情報が文字列 S1,S2,,SNS_1, S_2, \dots, S_N として与えられます。ここで S1,S2,,SNS_1, S_2, \dots, S_N はすべて長さ 55 で、列車 ii の A 列から E 列までがそれぞれ SiS_i11 文字目から 55 文字目と対応しており、その文字が o ならば対応する列に空席があることを、x ならば対応する列に空席がないことを意味します。

高橋君は XX 列の席を予約したいです。ここで XX は A、B、C、D、E のいずれかです。11 本以上の列車において XX 列に空席があるか判定してください。

制約 - NN11 以上 100100 以下の整数

  • XX は A、B、C、D、E のいずれか
  • SiS_iox からなる長さ 55 の文字列

入力 入力は以下の形式で標準入力から与えられる。

NN XX

S1S_1

S2S_2

\vdots

SNS_N

出力 11 本以上の列車において XX 列に空席があるならば Yes を、そうでないならば No を出力せよ。

B問題は最初からグリッドとして見て半ば機械的に解いてしまいました。Pythonの str 型の index() 関数に近いものを使えば実装が楽にはなりますが、そこまで複雑ではないので特に苦戦は強いられないと思われます。

C問題

問題文を表示

問題文 現在、会議室に NN 人の高橋くんがいます。 ii 番目 (1iN)(1 \le i \le N) の高橋くんの身長は HiH_i であり、今から LiL_i 分後に会議室を去ります。 一度会議室を去った高橋くんはそれ以降会議室に戻ることはありません。

QQ 個のクエリが与えられるので、順に答えてください。

ii 番目 (1iQ)(1 \le i \le Q) のクエリでは整数 TiT_i が与えられるので、今から $T_i

  • 0.5分後に会議室にいる高橋くんの身長の最大値を答えてください。この問題の制約のもとで、今から分後に会議室にいる高橋くんの身長の最大値を答えてください。 この問題の制約のもとで、今からT_i + 0.5分後には会議室に分後には会議室に1$ 人以上の高橋くんがいることが保証されます。

制約 - 1N3×1051 \le N \le 3 \times 10^5

  • 1Hi109 (1iN)1 \le H_i \le 10^9 \ (1 \le i \le N)
  • 1L1L2LN1091 \le L_1 \le L_2 \le \dots \le L_N \le 10^9
  • 1Q3×1051 \le Q \le 3 \times 10^5
  • 0Ti<LN (1iQ)0 \le T_i < L_N \ (1 \le i \le Q)
  • 入力はすべて整数

入力 入力は以下の形式で標準入力から与えられる。

NN

H1H_1 L1L_1

H2H_2 L2L_2

\vdots

HNH_N LNL_N

QQ

T1T_1 T2T_2 \dots TQT_Q

出力 QQ 行にわたって出力せよ。 ii 行目 (1iQ)(1 \le i \le Q) には、ii 番目のクエリに対する答えを出力せよ。

一見少し複雑に見えたC問題です。L の値が昇順で与えられる一方、クエリの T の値がばらばらなので、これを昇順にソートして尺取り法のように同時に進めるのが直観的でした。無理に典型と結びつけるならクエリ先読みにあたるでしょうか。

heap queue 解法を思いつきましたが、最大値でない高橋くんをどうやって退出させるかがネックです。DPも難しいし、それなら思いついているもので解こう、ととりあえず手を動かしました。

D問題

問題文を表示

問題文 数直線上に NN 枚の布があります。 ii 枚目 (1iN)(1 \le i \le N) の布は数直線上の区間 [Li,Ri][L_i, R_i] を覆っています。 数直線上の点は 22 枚以上の布で覆われていることも、どの布にも覆われていないこともあります。

22 枚の布が重なっているとは、数直線上のある点がその 22 枚の布どちらにも覆われていることをいいます。

重なっていない 22 枚の布について、それらの距離を以下のように定めます。

一方の布に覆われている点 pp ともう一方の布に覆われている点 qq に対する pq|p-q| の最小値

どの 22 枚も重なっていない KK 枚の布に対して、そのスコアを布どうしの距離の最小値と定めます。 NN 枚の布からどの 22 枚も重なっていないように KK 枚を選ぶときのスコアの最大値を求めてください。

ただし、そのように KK 枚の布を選ぶことができない場合、-1 を出力してください。

制約 - 2KN2×1052 \le K \le N \le 2 \times 10^5

  • 0Li<Ri109 (1iN)0 \le L_i < R_i \le 10^9 \ (1 \le i \le N)
  • 入力はすべて整数

入力 入力は以下の形式で標準入力から与えられる。

NN KK

L1L_1 R1R_1

L2L_2 R2R_2

\vdots

LNL_N RNR_N

出力 答えを出力せよ。

入力例 1 6 3

1 12

2 7

5 9

9 13

10 18

15 20

出力例 1 2

22 枚目、44 枚目、66 枚目の布を選ぶと、これらはどの 22 枚も重なっていません。 22 枚目の布と 44 枚目の布の距離は 2222 枚目の布と 66 枚目の布の距離は 8844 枚目の布と 66 枚目の布の距離は 22 なので、この選び方のスコアは 22 です。

スコアが 33 以上になるように 33 枚の布を選ぶことはできないため、22 を出力してください。

D問題は、誤読により本番中に解けませんでした。サークル内では一人だけ、ShoboiNamae君が本番ACしてましたね。すごすぎる。

問題文中の「スコア」の総和を最大化する問題だと思っていたら、どうやら「スコア」の最小値の最大化だったようで…。これなら隣り合う布同士の最低限の「距離」を固定すれば O(N)\mathcal{O}(N) でそれが適切か否かを判定でき、結果が単調になるのでいわゆる 「答えで二分探索」 を書けますね。この誤読がなければ時間内にEが解けたか分からなかったので結果オーライと言えばそうですが、あわよくば5完したかったです。

E問題

問題文を表示

問題文 AtCoder 国には NN 個の都市と MM 本の道路があります。 ii 本目の道路 (1iM)(1 \le i \le M) は都市 uiu_i と都市 viv_i を双方向に繋いでおり、一方からもう一方へ TiT_i 分かけて移動することができます。

また、それぞれの都市にはワープゲートが設置されており、都市 i (1iN)i \ (1 \le i \le N) から都市 j (1iN)j \ (1 \le i \le N) へワープゲートを使って Xi+Xj+YX_i + X_j + Y 分かけて移動することができます。

これ以外の方法で AtCoder 国の都市の間を移動することはできません。

k=2,3,,Nk=2,3,\dots,N について、次の問題を解いてください。

都市 11 から都市 kk へ移動するのにかかる時間の最小値を求めよ。

ただし、道路やワープゲートから同じ都市の別の道路やワープゲートへ移動するのにかかる時間は無視できるものとします。

制約 - 2N2×1052 \le N \le 2 \times 10^5

  • 0M2×1050 \le M \le 2 \times 10^5

  • 1ui<viN (1iM)1 \le u_i < v_i \le N \ (1 \le i \le M)

  • 1Ti109 (1iM)1 \le T_i \le 10^9 \ (1 \le i \le M)

  • 1Xi109 (1iN)1 \le X_i \le 10^9 \ (1 \le i \le N)

  • 1Y1091 \le Y \le 10^9

  • 入力はすべて整数 入力 入力は以下の形式で標準入力から与えられる。

    NN MM YY

    u1u_1 v1v_1 T1T_1

    u2u_2 v2v_2 T2T_2

    \vdots

    uMu_M vMv_M TMT_M

    X1X_1 X2X_2 \dots XNX_N

出力 k=2,3,,Nk=2,3,\dots,N に対する問題の答えを、この順に空白を区切りとして出力せよ。

E問題は愚直に解くと N2N^2 スケールで辺を追加しなければならずTLEしますが、ある地点を経由するような動きをさせることで辺の数を 2N2N にまで落とせます。同じような問題をどこかで見ましたが、 「超頂点」 と呼ばれる典型だそうです。

追加しなければならない辺を図に描いていると、無駄に同じ重みの辺をたくさん追加しているなと気づけるかもしれません。辺の数は NN の2倍しか増えないので、あとは重みつきグラフで最小コスト経路を求めるときに使う、あのアルゴリズムで解けますね。


最後に

D問題ではDP解法も浮かんでいましたが、DPにいまだ苦手意識があり「どうせ実装できないだろう」と二の足を踏んでいました。最初に思いついたアルゴリズムで無理やり実装しきって進むためにも、E問題を踏み越えるためにも、そろそろ克服したいところです。

Caffeineholicでした。

← 活動記事一覧に戻る