Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ACPC 2019 Day3 F: 部分文字列分解

2019/9/20 会津大学競技プログラミング合宿 Day3 (北大セット) F 問題
※文字が見えない場合は、ダウンロードするかフルスクリーンにしてご覧ください

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

  • Be the first to like this

ACPC 2019 Day3 F: 部分文字列分解

  1. 1. ACPC 2019 day3-F 部分⽂字列分解 原案 : tsukasa_diary 問題⽂ : TAB テスター : Tsuta_J, rsk0315, TAB
  2. 2. 問題概要 ⽂字列 S, T と整数 K が与えられる T の⻑さ K 以上の連続する部分⽂字列の連結で S を作れるか判定せよ Input S = ‘abracadabra’ T = ‘cadabra’ K = 4 Output Yes c a d a b r a abra cadabra
  3. 3. 解法 Ø次のような dp を考える dp[i] = " 0, 𝑆 0, 𝑖 についての答えが𝑁𝑜 正の値, 𝑆 0, 𝑖 についての答えが𝑌𝑒𝑠 Ø更新はどうするか • S[i:i+k] が T の連続する部分列となるような k の最 ⼤値がわかっているとする • j >= K の時 dp[i+K], dp[i+K+1], … dp[i+j] に +1 する • Imos 法的にやるとうまくいく
  4. 4. 解法 Ø S[i:i+k] が T の連続する部分列となるような k の最⼤値 をどうやって求めるか → Suffix Array & LCP Array でできます(蟻本 p. 335) Øどうやるの? • S + “#” + T のような⽂字列に対して SA を構築 • S の各 suffix について、SA 上でその直前、直後に現れる T の suffix の位置を求める (⼆分探索 or 前処理) • 求めた T の suffix と prefix が何⽂字⼀致するか求める (SegmentTree を使って区間最⼩値を求める) Ø全体で O( (|S|+|T|) log(|S|+|T|) ) とかで解ける
  5. 5. 統計情報 • Tester 解 • Tsuta_J : 319 ⾏, 10442 bytes • rsk0315 : 229 ⾏, 6341 bytes • TAB : 167 ⾏, 3748 bytes • First acceptance • On-site: sakenichia, 51:40 • On-line: feeling_world, 1:50:52 • AC 率 • 9/32 (28%)

    Be the first to comment

2019/9/20 会津大学競技プログラミング合宿 Day3 (北大セット) F 問題 ※文字が見えない場合は、ダウンロードするかフルスクリーンにしてご覧ください

Views

Total views

249

On Slideshare

0

From embeds

0

Number of embeds

2

Actions

Downloads

2

Shares

0

Comments

0

Likes

0

×