はじめに
おはようございます。Twil3akineといいます。初めての記事、緊張します。 本当のところを言うと、約1ヶ月ぶり(4/18)のRatedだったので割と緊張しました。マジで緊張しました。 半分怪しい4完で無事に温まったので、OKです。
![[レートが温まっている図]](/_astro/abc459-img1.DDNEDWJM_1QftiG.webp)
なお、記事中に掲載しているURL先のコードはコンテスト後に綺麗に整形したコードです。
あと、私はRustaceanなので、そこらへんはご了承ください。_( ・ ω ・ )_
今回は少しレイアウトを模索してます。そこもご了承ください。
結果サマリ
- ABC459
- WCPC参加人数: 6人
- 各問題の最速解答者(ペナルティ無し):
| 問題 | 参加者名 | タイム | 言語 |
|---|---|---|---|
| A | nsubaru | 1:09 | Java |
| B | ShoboiNamae | 4:16 | C++ |
| C | nsubaru | 20:15 | Java |
| D | nsubaru | 69:56 | Java |
| E | - | - | - |
| F | - | - | - |
| G | - | - | - |
今週の出題
A問題
問題ページ: A - Hell, World!
Aは安心のAを体現した問題でしたね。もちろん皆さん for文 を用いて 文字を削除しましたよね?
私はもちろん難しいメソッドとかは知らないので、for文 でいい感じにやりました。
B問題
問題ページ: B - 459
私はこの問題を許しません(1敗)。めんどくさいB問題よりかはいいんですけど、 ちゃんと凝視しながらコードを書かないとWAになるような問題ってすごいこう…嫌じゃないですか?
嫌じゃない…?まぁそういう人もいますよね。
Rustはこういうパターンマッチングは結構強いのでこういうところはとても好きですね。
ちなみに、元ネタはスマホのフリック入力らしいですね。そう聞いたら、いい問題…なのか?
C問題
問題ページ: C - Drop Blocks
まず、懺悔ポイント1です。正攻法がわからなかったので、セグメントツリー略してセグ木を使わせていただきました。
完全に言い訳なのですが、C問題でセグ木使いたくないなぁ、絶対に何か正攻法があるはずなんだけどなぁ、なんなら絶対これなんやろうけどなぁ、でも実装がわけわからんからなぁと考えた結果、セグ木になりました。
まぁ、本当にここ2,3日以内にライブラリに入ったことに起因する、『使い方がわかってない』によって、3ペナを出したのはまた別のお話…
ここから真面目なお話
-
クエリ1の『全部のマスに1つ以上のブロックがあるとき、全マス1つずつ取り除く』と言うのは、本当に全部のマスのブロックを1つずつ取り除くのではなく、『全マス何個取り除いたのか』を変数として持っておくと良いです。
-
クエリ2について、和を持つセグ木(
RSQ)を使用することで、まずmax_rightで何回ブロックを取り除いたのかを取得し、 その数をuと置くと、『y+u個以上ブロックが積まれていないマスの個数』を取得し、全体のマスから引くと求めるものを得られる、と言うことになります。
正攻法については、おいおいやっていこうと思います。
nsubaru に言われて、max_right を実装しておいて本当に良かったなぁ。と言う気持ちです。感謝感激雨霰ですね。
D問題
問題ページ: D - Adjacent Distinct String
さて、ここが懺悔ポイント2となり、ここまでしか解けなかったのですが、 なので、スタックとかそこらへんの だろうと考えたのですが、一向にわからないので、謎貪欲を考え、 それが通らなかったらもう帰ろうと言う感じでいました。
謎貪欲の詳細
-
に対して、(文字, 出現回数)のタプルを MaxHeap に入れる。
-
解答の文字を保管する解答配列を用意
-
以下の操作を Heap が空になるまで繰り返す。
-
出現回数が最も多い文字を取得(pop)し、解答配列の最後尾と比較し、違うならその取り出した文字を、 同じ文字なら取り出した文字は Heap に戻し、その次に Heap に入ってる文字を取り出して答え配列に追加。
-
追加した文字の出現回数を
-1し、Heap に戻す。 -
解答配列の最後尾と最初に取り出した文字が同じ時に、残りの Heap が空になった時、
Noを出力し、次の に進む。
- 生成した解答配列を出力する。
これで実装して、提出すると AC になります。
ただ、コンテスト後にサークルメンバーに教えてもらったのですが、奇数文字目を先に埋めて、偶数文字目を埋めていく貪欲で 通るらしいですね…流石に目から鱗案件でした。
ABC459-E以降
(これ以降の問題文は割愛します。)
最後に
次に私が記事を書くのは私が入緑した時でしょう… ここまでお読みいただきありがとうございました。またお会いいたしましょう。