SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
北大合宿 2019 Day2 H: Revenge of UMG
原案: tempura
問題文: drken
解答: tempura・tsutaj・tubuann・drken
解説: tempura
2019 年 7 月 15 日
tempura HUPC 2019 Day2 H 2019/7/15 1 / 8
問題
Revenge of UMG
’?’, ’U’, ’M’, ’G’ からなる文字列 S が与えられる
’?’ のそれぞれを ’U’, ’M’, ’G’ のいずれかに置き換えて得られる全て
の文字列 T について
1 ≤ i < j < k ≤ |T|
j − i = k − j
Ti =’U’ かつ Tj =’M’ かつ Tk =’G’
となる (i, j, k) の組の数を数えてその合計を 998244353 でわった余り
を答えよ。
制約
1 ≤ |S| ≤ 2 × 105
tempura HUPC 2019 Day2 H 2019/7/15 2 / 8
少し簡単な問題
とりあえず ’?’ のない文字列について考える
tempura HUPC 2019 Day2 H 2019/7/15 3 / 8
少し簡単な問題
とりあえず ’?’ のない文字列について考える
真ん中を固定して考えることにすると、各 j について
i + k = 2j
i < k
Ti =’U’ かつ Tk =’M’
をみたす (i, k) の組の数が (高速に) 分かればいい
tempura HUPC 2019 Day2 H 2019/7/15 3 / 8
少し簡単な問題
ここで、
U[x] = 1(Tx =’U’ のとき),0(else)
G[x] = 1(Tx =’G’ のとき),0(else)
と定める
tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
少し簡単な問題
ここで、
U[x] = 1(Tx =’U’ のとき),0(else)
G[x] = 1(Tx =’G’ のとき),0(else)
と定める
すると、求めたいものは
∑
i+k=2j,i<k
U[i] × G[k]
tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
少し簡単な問題
ここで、
U[x] = 1(Tx =’U’ のとき),0(else)
G[x] = 1(Tx =’G’ のとき),0(else)
と定める
すると、求めたいものは
∑
i+k=2j,i<k
U[i] × G[k]
畳み込みっぽい!
tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
さらに簡単な問題
もし i < k の条件がなければ、
∑
i+k=2j,i<k
U[i] × G[k]
は、多項式 U[1]x + U[2]x2 + · · · + U[N]xN と
G[1]x + G[2]x2 + · · · + G[N]xN の積の x2j の係数
tempura HUPC 2019 Day2 H 2019/7/15 5 / 8
さらに簡単な問題
もし i < k の条件がなければ、
∑
i+k=2j,i<k
U[i] × G[k]
は、多項式 U[1]x + U[2]x2 + · · · + U[N]xN と
G[1]x + G[2]x2 + · · · + G[N]xN の積の x2j の係数
多項式の掛け算は FFT(or NTT) で O(N log N) で計算することがで
きるので解けた
tempura HUPC 2019 Day2 H 2019/7/15 5 / 8
少し簡単な問題
i < k をみたすものだけを数えるにはどうすればいいか?
tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
少し簡単な問題
i < k をみたすものだけを数えるにはどうすればいいか?
もとの多項式のかわりに、
U[1]x + U[2]x2 + · · · + U[N
2 ]x
N
2 と
G[N
2 + 1]x
N
2
+1
+ G[N
2 + 2]x
N
2
+2
+ · · · + G[N]xN
の積を考える
tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
少し簡単な問題
i < k をみたすものだけを数えるにはどうすればいいか?
もとの多項式のかわりに、
U[1]x + U[2]x2 + · · · + U[N
2 ]x
N
2 と
G[N
2 + 1]x
N
2
+1
+ G[N
2 + 2]x
N
2
+2
+ · · · + G[N]xN
の積を考える
これにより、1 ≤ i ≤ N
2 , N
2 + 1 ≤ k ≤ N なる (i, k) の組全てについ
て数えることができる
tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
少し簡単な問題
あと考慮すべきものは、
1 ≤ i < k ≤ N
2 と N
2 + 1 ≤ i < k ≤ N
の 2 つ
tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
少し簡単な問題
あと考慮すべきものは、
1 ≤ i < k ≤ N
2 と N
2 + 1 ≤ i < k ≤ N
の 2 つ
これはもとの問題の半分のサイズの問題 ×2
tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
少し簡単な問題
あと考慮すべきものは、
1 ≤ i < k ≤ N
2 と N
2 + 1 ≤ i < k ≤ N
の 2 つ
これはもとの問題の半分のサイズの問題 ×2
分割統治のように順々に半分にしていくことで全体で O(N(log N)2)
で解けた。
tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
もとの問題
’?’ がある場合は?
tempura HUPC 2019 Day2 H 2019/7/15 8 / 8
もとの問題
’?’ がある場合は?
’?’ は’U’, ’M’, ’G’ にそれぞれ確率 1
3 でなるとして UMG 数の期待値
を計算して、最後に 3Q 倍すればおっけー
U[x] = 1(Sx =’U’ のとき), 1
3 (Sx =’?’ のとき), 0(else) にする
各 x2j
の係数について、Sj =’M’ ならそのまま足す、
Sj =’?’ なら 1
3 倍して足す
tempura HUPC 2019 Day2 H 2019/7/15 8 / 8
Writer 解・統計
Writer 解
tempura (C++・124 行・3151 bytes)
tsutaj (C++・111 行・2969 bytes)
tubuann (C++・299 行・6971 bytes)
drken (C++・122 行・4106 bytes)
統計
AC / tried: 3 / 17 (17.6% )
First AC
On-site: – (– min – sec)
On-line: The_Way (113 min 40 sec)
tempura HUPC 2019 Day2 H 2019/7/15 9 / 8

Mais conteúdo relacionado

Mais de HCPC: 北海道大学競技プログラミングサークル

Mais de HCPC: 北海道大学競技プログラミングサークル (20)

ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニックプログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
 
RUPC 2019 Day3 G: Donuts Orientation
RUPC 2019 Day3 G: Donuts OrientationRUPC 2019 Day3 G: Donuts Orientation
RUPC 2019 Day3 G: Donuts Orientation
 
RUPC 2019 Day3 D: 矢
RUPC 2019 Day3 D: 矢RUPC 2019 Day3 D: 矢
RUPC 2019 Day3 D: 矢
 
RUPC 2019 Day3 F: 赤黒そーるじぇむ
RUPC 2019 Day3 F: 赤黒そーるじぇむRUPC 2019 Day3 F: 赤黒そーるじぇむ
RUPC 2019 Day3 F: 赤黒そーるじぇむ
 

Último

Último (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

HUPC 2019 Day2 H: Revenge of UMG

  • 1. 北大合宿 2019 Day2 H: Revenge of UMG 原案: tempura 問題文: drken 解答: tempura・tsutaj・tubuann・drken 解説: tempura 2019 年 7 月 15 日 tempura HUPC 2019 Day2 H 2019/7/15 1 / 8
  • 2. 問題 Revenge of UMG ’?’, ’U’, ’M’, ’G’ からなる文字列 S が与えられる ’?’ のそれぞれを ’U’, ’M’, ’G’ のいずれかに置き換えて得られる全て の文字列 T について 1 ≤ i < j < k ≤ |T| j − i = k − j Ti =’U’ かつ Tj =’M’ かつ Tk =’G’ となる (i, j, k) の組の数を数えてその合計を 998244353 でわった余り を答えよ。 制約 1 ≤ |S| ≤ 2 × 105 tempura HUPC 2019 Day2 H 2019/7/15 2 / 8
  • 4. 少し簡単な問題 とりあえず ’?’ のない文字列について考える 真ん中を固定して考えることにすると、各 j について i + k = 2j i < k Ti =’U’ かつ Tk =’M’ をみたす (i, k) の組の数が (高速に) 分かればいい tempura HUPC 2019 Day2 H 2019/7/15 3 / 8
  • 5. 少し簡単な問題 ここで、 U[x] = 1(Tx =’U’ のとき),0(else) G[x] = 1(Tx =’G’ のとき),0(else) と定める tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
  • 6. 少し簡単な問題 ここで、 U[x] = 1(Tx =’U’ のとき),0(else) G[x] = 1(Tx =’G’ のとき),0(else) と定める すると、求めたいものは ∑ i+k=2j,i<k U[i] × G[k] tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
  • 7. 少し簡単な問題 ここで、 U[x] = 1(Tx =’U’ のとき),0(else) G[x] = 1(Tx =’G’ のとき),0(else) と定める すると、求めたいものは ∑ i+k=2j,i<k U[i] × G[k] 畳み込みっぽい! tempura HUPC 2019 Day2 H 2019/7/15 4 / 8
  • 8. さらに簡単な問題 もし i < k の条件がなければ、 ∑ i+k=2j,i<k U[i] × G[k] は、多項式 U[1]x + U[2]x2 + · · · + U[N]xN と G[1]x + G[2]x2 + · · · + G[N]xN の積の x2j の係数 tempura HUPC 2019 Day2 H 2019/7/15 5 / 8
  • 9. さらに簡単な問題 もし i < k の条件がなければ、 ∑ i+k=2j,i<k U[i] × G[k] は、多項式 U[1]x + U[2]x2 + · · · + U[N]xN と G[1]x + G[2]x2 + · · · + G[N]xN の積の x2j の係数 多項式の掛け算は FFT(or NTT) で O(N log N) で計算することがで きるので解けた tempura HUPC 2019 Day2 H 2019/7/15 5 / 8
  • 10. 少し簡単な問題 i < k をみたすものだけを数えるにはどうすればいいか? tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
  • 11. 少し簡単な問題 i < k をみたすものだけを数えるにはどうすればいいか? もとの多項式のかわりに、 U[1]x + U[2]x2 + · · · + U[N 2 ]x N 2 と G[N 2 + 1]x N 2 +1 + G[N 2 + 2]x N 2 +2 + · · · + G[N]xN の積を考える tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
  • 12. 少し簡単な問題 i < k をみたすものだけを数えるにはどうすればいいか? もとの多項式のかわりに、 U[1]x + U[2]x2 + · · · + U[N 2 ]x N 2 と G[N 2 + 1]x N 2 +1 + G[N 2 + 2]x N 2 +2 + · · · + G[N]xN の積を考える これにより、1 ≤ i ≤ N 2 , N 2 + 1 ≤ k ≤ N なる (i, k) の組全てについ て数えることができる tempura HUPC 2019 Day2 H 2019/7/15 6 / 8
  • 13. 少し簡単な問題 あと考慮すべきものは、 1 ≤ i < k ≤ N 2 と N 2 + 1 ≤ i < k ≤ N の 2 つ tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
  • 14. 少し簡単な問題 あと考慮すべきものは、 1 ≤ i < k ≤ N 2 と N 2 + 1 ≤ i < k ≤ N の 2 つ これはもとの問題の半分のサイズの問題 ×2 tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
  • 15. 少し簡単な問題 あと考慮すべきものは、 1 ≤ i < k ≤ N 2 と N 2 + 1 ≤ i < k ≤ N の 2 つ これはもとの問題の半分のサイズの問題 ×2 分割統治のように順々に半分にしていくことで全体で O(N(log N)2) で解けた。 tempura HUPC 2019 Day2 H 2019/7/15 7 / 8
  • 17. もとの問題 ’?’ がある場合は? ’?’ は’U’, ’M’, ’G’ にそれぞれ確率 1 3 でなるとして UMG 数の期待値 を計算して、最後に 3Q 倍すればおっけー U[x] = 1(Sx =’U’ のとき), 1 3 (Sx =’?’ のとき), 0(else) にする 各 x2j の係数について、Sj =’M’ ならそのまま足す、 Sj =’?’ なら 1 3 倍して足す tempura HUPC 2019 Day2 H 2019/7/15 8 / 8
  • 18. Writer 解・統計 Writer 解 tempura (C++・124 行・3151 bytes) tsutaj (C++・111 行・2969 bytes) tubuann (C++・299 行・6971 bytes) drken (C++・122 行・4106 bytes) 統計 AC / tried: 3 / 17 (17.6% ) First AC On-site: – (– min – sec) On-line: The_Way (113 min 40 sec) tempura HUPC 2019 Day2 H 2019/7/15 9 / 8