WCPC
AtCoder

ABC464参加記

2026年6月27日 A Akagi_shrine

前回の参加記(ABC463回)

はじめに

こんにちは。Akagi_shrineです。 ABC4完で満足していましたが、余裕があったのでE問題に挑戦したらまさかのAC!

大満足のコンテストになって、そのまま入緑できました


結果サマリ

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

問題参加者名タイム言語
Ansubaru1:02Java
Bkotomiko6:35C++
Ckotomiko14:20C++
DShoboiNamae26:27C++
EAkagi_shrine74:21C++
F---
G---

今週の出題

A問題

問題文を表示

問題文 ある都にて、東軍と西軍が戦っています。

高橋君は戦っている軍勢の情報を文字列 SS として記録しました。

SS には文字 EW のみが含まれており、SS に含まれる文字 E の数と東軍の人数、W の数と西軍の人数がそれぞれ一致します。

高橋君が記録した SS が与えられるので、東軍の人数が西軍の人数より多いなら East 、西軍の人数が東軍の人数より多いなら West と出力してください。

なお、SS の長さは奇数であることが保証されます。そのため、東軍と西軍のどちらか一方がもう一方に比べて真に人数が多い(つまり、両方の軍勢の人数が同じであることはない)ことが証明できます。

制約 - SS は長さ 11 以上 9999 以下の EW からなる文字列

  • SS の長さは奇数

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

SS

出力 答えを出力せよ。

A問題はいつも通りの難易度でした。前から順番にEとWの数を数えて、多い方を判定すれば解けます。

B問題

問題文を表示

問題文 高さ HH ピクセル、幅 WW ピクセルの白黒画像があります。 上から ii 行目、左から jj 列目のピクセルの色は文字 Ci,jC_{i,j} として与えられ、. は白、# は黒を表します。

この画像の上下左右の端から、すべてのピクセルが白であるような行や列を削除します。 具体的には、次の処理を順に行います。

  • 画像の最上行がすべて白である限り、最上行を削除することを繰り返す。
  • 画像の最下行がすべて白である限り、最下行を削除することを繰り返す。
  • 画像の最左列がすべて白である限り、最左列を削除することを繰り返す。
  • 画像の最右列がすべて白である限り、最右列を削除することを繰り返す。

処理後の画像を出力してください。 なお、与えられる画像には黒いピクセルが少なくとも 11 つ存在します。

制約 - 1H,W501 \le H, W \le 50

  • Ci,jC_{i,j}. または # である
  • 黒いピクセルが少なくとも 11 つ存在する

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

HH WW

C1,1C1,2C1,WC_{1,1} C_{1,2} \dots C_{1,W}

C2,1C2,2C2,WC_{2,1} C_{2,2} \dots C_{2,W}

\vdots

CH,1CH,2CH,WC_{H,1} C_{H,2} \dots C_{H,W}

出力 処理後の画像を、以下の形式で出力せよ。 ここで、h,wh, w は処理後の画像の高さと幅(ピクセル単位)である。 また、ci,jc_{i,j} は処理後の画像の上から ii 行目、左から jj 列目のピクセルの色を表す文字であり、白のときは . 、黒のときは # とする。

c1,1c1,2c1,wc_{1,1} c_{1,2} \dots c_{1,w}

c2,1c2,2c2,wc_{2,1} c_{2,2} \dots c_{2,w}

\vdots

ch,1ch,2ch,wc_{h,1} c_{h,2} \dots c_{h,w}

B問題はグリッド上に出現する黒色の座標において、縦方向と横方向それぞれの最小と最大の値を求めます。これらの範囲が処理後の画像となります。

C問題

問題文を表示

問題文 高橋君は鳥 1,2,,N1,2,\dots,NNN 羽の鳥を MM 日間観察しました。

高橋君が観察した鳥には色 1,2,,N1,2,\dots,NNN 色のうちいずれか 11 色がついていますが、これらの鳥には観察期間中に色が変化するという興味深い特徴があります。

iiDi1D_i-1 日目以前の観察では色 AiA_i であり、DiD_i 日目以降の観察では色 BiB_i になりました。 ただし、Di=1D_i=1 である場合はその鳥の色は 11 日目の観察から BiB_i であり、Ai=BiA_i=B_i である場合はその鳥の色は観察期間中に変化しませんでした。

j=1,2,,Mj=1,2,\dots,M について、jj 日目の観察で鳥の色が何種類あったかを求めてください。

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

  • 1M3×1051 \le M \le 3 \times 10^5
  • 1Ai,BiN1 \le A_i, B_i \le N
  • 1DiM1 \le D_i \le M
  • 入力はすべて整数

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

NN MM

A1A_1 D1D_1 B1B_1

A2A_2 D2D_2 B2B_2

\vdots

ANA_N DND_N BNB_N

出力 MM 行出力せよ。 そのうち jj 行目には、jj 日目に鳥の色が何種類あったかを出力せよ。

問題Cは観察した日数の制約が10510^5と小さいため、日数分の配列をとりインデックスを日数として、色が変わる日に何色から何色に変わるかを保持して、1日目から順番に見ればO(N+M)\mathcal{O}(N + M)で解くことができます。

D問題

問題文を表示

問題文 これから NN 日間の天気が文字列 SS として与えられます。

SSii 文字目が S であるとき ii 日目の天気は晴れ、R であるとき ii 日目の天気は雨です。 また、現時点では嬉しさは 00 です。

あなたは、以下の操作を 00 回以上何回でも行えます。

  • 11 以上 NN 以下の整数 ii を選ぶ。
  • ii 日目の天気が晴れであれば雨、雨であれば晴れに変更する。ただし、ii 日目の天気を変更した場合、嬉しさが XiX_i 減少する。

操作を行った後の最終的な天気に対して、以下の条件で嬉しさが増加します。

  • 1iN11 \le i \le N-1 を満たす各整数 ii について、変更後の ii 日目の天気が雨、かつ i+1i+1 日目の天気が晴れであるとき、嬉しさが YiY_i 増加する。

操作を行った結果として、達成可能な嬉しさの最大値を求めてください。

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

制約 - 1T1041 \le T \le 10^4

  • NN22 以上 2×1052 \times 10^5 以下の整数
  • SS は長さ NNSR からなる文字列
  • XiX_i11 以上 10910^9 以下の整数
  • YiY_i11 以上 10910^9 以下の整数
  • ひとつの入力における NN の総和は 2×1052 \times 10^5 以下

入力 入力は以下の形式で標準入力から与えられる。ここで casei\text{case}_iii 個目のテストケースを意味する。

TT

case1\text{case}_1

case2\text{case}_2

\vdots

caseT\text{case}_T

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

NN

SS

X1X_1 X2X_2 \dots XNX_N

Y1Y_1 Y2Y_2 \dots YN1Y_{N-1}

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

D問題はDPを用いて解きます。天気を変えるペナルティと雨→晴れによる嬉しさアップが複雑に絡み合った問題ですが、直前の日の天気さえ分かれば、今日の嬉しさを確定できるという性質から、DPに落とし込むことができます。

E問題

問題文を表示

問題文 H×WH \times W のグリッドがあります。はじめ、すべてのマスに A が書かれています。上から ii 行目、左から jj 列目のマスを (i,j)(i,j) で表します。

これから QQ 回の操作を順に行います。 ii 回目の操作では、左上のマスを (1,1)(1,1)、 右下のマスを (Ri,Ci)(R_i, C_i) とする長方形に含まれるすべてのマスを、英大文字 XiX_i で上書きします。

すべての操作を行った後のグリッドを出力してください。

制約 - 1H,W1 \le H, W

  • H×W106H \times W \le 10^6
  • 1Q2×1051 \le Q \le 2 \times 10^5
  • 1RiH1 \le R_i \le H
  • 1CiW1 \le C_i \le W
  • XiX_i は英大文字
  • 入力される数値はすべて整数

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

HH WW QQ

R1R_1 C1C_1 X1X_1

R2R_2 C2C_2 X2X_2

\vdots

RQR_Q CQC_Q XQX_Q

出力 HH 行出力せよ。 ii 行目には長さ WW の文字列であって、jj 文字目が操作後のグリッドにおいて (i,j)(i,j) に書かれている英大文字であるものを出力せよ。

E問題は愚直に解くと O(H×W×Q)\mathcal{O}(H × W ×Q)であるため、後ろのクエリでの文字の方が優先されることと、(1,1)(1,1)からの(i,j)(i,j)の長方形で上書きすることから、二次元の累積maxにより、すべてのマスに対して自分を覆っている最大のクエリ番号を求めることができます。


最後に

E問題では解法がfor文を回してグリッドの値をmaxとりながら更新するだけで解けてしまうため、合っているのかが少し心配になりました。

Akagi_shrineでした。

← 活動記事一覧に戻る