WCPC
AtCoder

ABC459参加記

2025年5月23日 T Twil3akine

前回の参加記(ABC458回)

はじめに

おはようございます。Twil3akineといいます。初めての記事、緊張します。 本当のところを言うと、約1ヶ月ぶり(4/18)のRatedだったので割と緊張しました。マジで緊張しました。 半分怪しい4完で無事に温まったので、OKです。

[レートが温まっている図]

なお、記事中に掲載しているURL先のコードはコンテスト後に綺麗に整形したコードです。
あと、私はRustaceanなので、そこらへんはご了承ください。_( ・ ω ・ )_
今回は少しレイアウトを模索してます。そこもご了承ください。


結果サマリ

問題参加者名タイム言語
Ansubaru1:09Java
BShoboiNamae4:16C++
Cnsubaru20:15Java
Dnsubaru69:56Java
E---
F---
G---

今週の出題

A問題

問題ページ: A - Hell, World!

Aは安心のAを体現した問題でしたね。もちろん皆さん for文 を用いて XX 文字を削除しましたよね?

私はもちろん難しいメソッドとかは知らないので、for文 でいい感じにやりました。

実際のコード


B問題

問題ページ: B - 459

私はこの問題を許しません(1敗)。めんどくさいB問題よりかはいいんですけど、 ちゃんと凝視しながらコードを書かないとWAになるような問題ってすごいこう…嫌じゃないですか?

嫌じゃない…?まぁそういう人もいますよね。

Rustはこういうパターンマッチングは結構強いのでこういうところはとても好きですね。

ちなみに、元ネタはスマホのフリック入力らしいですね。そう聞いたら、いい問題…なのか?

実際のコード


C問題

問題ページ: C - Drop Blocks

まず、懺悔ポイント1です。正攻法がわからなかったので、セグメントツリー略してセグ木を使わせていただきました。

完全に言い訳なのですが、C問題でセグ木使いたくないなぁ、絶対に何か正攻法があるはずなんだけどなぁ、なんなら絶対これなんやろうけどなぁ、でも実装がわけわからんからなぁと考えた結果、セグ木になりました。

まぁ、本当にここ2,3日以内にライブラリに入ったことに起因する、『使い方がわかってない』によって、3ペナを出したのはまた別のお話…

ここから真面目なお話

正攻法については、おいおいやっていこうと思います。

nsubaru に言われて、max_right を実装しておいて本当に良かったなぁ。と言う気持ちです。感謝感激雨霰ですね。

実際のコード


D問題

問題ページ: D - Adjacent Distinct String

さて、ここが懺悔ポイント2となり、ここまでしか解けなかったのですが、S106\sum\limits S \leq 10^6 なので、スタックとかそこらへんの O(N)O(N) だろうと考えたのですが、一向にわからないので、謎貪欲を考え、 それが通らなかったらもう帰ろうと言う感じでいました。

謎貪欲の詳細

  1. SiS_i に対して、(文字, 出現回数)のタプルを MaxHeap に入れる。

  2. 解答の文字を保管する解答配列を用意

  3. 以下の操作を Heap が空になるまで繰り返す。

  1. 生成した解答配列を出力する。

これで実装して、提出すると AC になります。

ただ、コンテスト後にサークルメンバーに教えてもらったのですが、奇数文字目を先に埋めて、偶数文字目を埋めていく貪欲で 通るらしいですね…流石に目から鱗案件でした。

実際のコード


ABC459-E以降

(これ以降の問題文は割愛します。)


最後に

次に私が記事を書くのは私が入緑した時でしょう… ここまでお読みいただきありがとうございました。またお会いいたしましょう。

← 活動記事一覧に戻る