ゆるふわ競プロオンサイト @FORCIA #2 ゴリラの挑戦状
9/14(土) 13:30-19:00(コンテストは14:10-16:10)
オンサイト参加登録一番乗りしていたのだけれど、都合により当日都内(国内)にいないことが確定してキャンセル
でオンライン参加
9完で8位(オンライン参加2位)
(※全部で10問だと思ってたら2ページ目があった)
(あとで書く)
チェビシェフ距離への置き換えを利用して(k次元)マンハッタン距離の最大値を求める方法
LeetCode Weekly Contest 146のQ4でN個の点の3次元マンハッタン距離の最大値を求める問題が出たのでメモ。
内容的には
を理解する過程で噛み砕いたものなので、上記記事を既読の方は本稿を読むには及ばない。
MathJaxの不具合なのか、の下にが書けなかったのでで代用。
続きを読むA - GAFA文字列
A - GAFA文字列
実行時間制限: 2 sec / メモリ制限: 1024 MB
配点: 100点
問題文
Google, Apple, Facebook, Amazon各々の頭文字G,A,F,A
のみからなる文字列をGAFA文字列と呼びます。
GAFA文字列 が1つ与えられます。高橋君はこの文字列に以下の操作を回まで行うことができます。
AtCoderの頭文字のA
はAtCoderのA
に置き換えることができません。
この操作の後にできる文字列の中で、A
が最も多く含まれるものを表示してください。複数ある場合はどれを表示しても構いません。
制約
- は
'G','A','F','A'
のみからなる文字列
入力
入力は以下の形式で標準入力から与えられる。
K s
出力:
操作の後にできる文字列の中で、A
が最も多く含まれるものを出力せよ。
入力例1
1 GAFA
出力例1
GAFA
Appleの頭文字のA
(文字列の2文字目)をAtCoderのA
に置き換えたもので、A
が2つ含まれます。
他にも、Amazonの頭文字のA
(文字列の4文字目)をAtCoderのA
に置き換えた
GAFA
もこの条件にあてはまります。
入力例2
0 GAFA
出力例2
GAFA
文字を置き換えることができないので、入力と同じ GAFA
を表示します。
Suffix Array(接尾辞配列)とLCP(最長共通接頭辞)arrayを線形時間で構築する方法を調べてみた 〜SA-ISとKasai's algorithm〜
suffix arrayは知ってます。(当然)
(知ったきっかけは何だったかな…高林さんのsaryかな)
以前、英辞書検索用のCLIツールを作る時などにも使いました。
でも今までずっと、文字列のポインタを1つずつずらした(文字列の長さ分の)char**配列を用意してqsortでstrcmp的なものを渡すような、愚直な(の)書き方しかしたことがありませんでした。
あまりそれで困るような場面に遭遇したことがなかったということでもありますが、
競プロで使うとなるとそういうわけにはいきません。
制約がとかだともう無理ですよね。
LCP(最長共通プレフィックス)array もそうです。
suffix arrayを作った後に、隣り合う項目同士の最長共通プレフィックスを求めておくやつです。
隣同士の最長共通プレフィックスのリストがあると、あとはRMQとか使えば任意の2つのサフィックスの共通プレフィックスが求められたりして便利(らしい)です。
(配列の長さ-1)組の文字列の比較なので普通に考えたらかかります…よね*1。
なのに、なのにいかにもsuffix arrayとLCP(最長共通プレフィックス)arrayを計算して下さいと言わんばかりの問題*2が来て、上位陣はsuffix arrayで通しているというのです。
そこで
- O(N)でsuffix arrayが構築できる方法
と
- O(N)でLCP arrayが構築できる方法
について調べてみました。
続きを読む上級者の皆様には「そんな事も知らなかったのか」「蟻本(上級編)に書いてあるぞ」「蟻本読め」「蟻本」と思われることでしょうが青コーダーレベルだと今までそれで困る場面がなかったということでお許しください。
Google Code Jam 2019 - Qualification Round
4/6(土)08:00 - 4/7(日)11:00
Qualに限って相談OKなので、有志4人で集まって電源wifi完備なカラオケルームを借りて参加*1
全員予選通過ライン(30点)は超えられたので目的は果たせたかと
会場でD-smallまで解いて(提出は帰宅後)
その後D-largeも解いて終了。
終了後ジャッジでLargeも全て通って100点満点
次はRound 1でお会いしましょう。
【参考資料】当日のセットリスト(誰がどれを歌ったかは秘匿)
docs.google.com
*1:1AC→1曲歌ったら次の問題に進める