SlideShare a Scribd company logo
1 of 7
Download to read offline
C 問題 解説
原案,解説:えびちゃん
ACPC 2019, Day 3
C 問題 解説 原案,解説:えびちゃん
問題概要
{0, 1, . . . , 9} からなる順列 P と非負整数 D があり,長さが D の
桁数と等しい文字列 C を次のように作る.
D の上から i 桁目が j であるとき C の i 文字目は Pj である.
このとき,C の先頭には余分な 0 がつくこともある.
D を 109 + 7 で割った余り M と,文字列 C が与えられる.
D としてありうる整数が存在する場合はそれを復元し,なければ
-1 を出力せよ.1 ⩽ |C| ⩽ 105,0 ⩽ M < 109 + 7.
C 問題 解説 原案,解説:えびちゃん
考察
std::next_permutation を知っていますか?
順列 P を全通り試してみることを考える.
これは 10! = 3628800 通りある.
毎回 O(|C|) 時間かけて復元すると TLE しそう.
どうしよう?
C 問題 解説 原案,解説:えびちゃん
考察
各数字 i について,C 中の i を 1 に,それ以外を 0 に置き換えた
ものを 109 + 7 で割った余りを求め,これを f(i) としてメモして
おく.
例:C = 30386
0 → 01000, f(0) = 1000
3 → 10100, f(3) = 10100
6 → 00001, f(6) = 1
8 → 00010, f(8) = 10
各順列 P′ に対して
(∑9
i=0 f(i) · Pi
)
mod 109 + 7 を求め,それが
M と一致すれば OK.
C 問題 解説 原案,解説:えびちゃん
コーナーケース
leading-zero の扱いには注意.
先頭が 0 の解はだめ?
→ D = 0 のとき墜ちそう.
→ これのせいで一発 AC なし.
leading zero がある解を見つけた時点で -1 を出力?
→ 例:以下は両方 469 と合同.
0000000000000000469
6666666666666666809
C 問題 解説 原案,解説:えびちゃん
まとめ・計算量
O(|C| · |P|) 時間かけて f(0), f(1), . . . , f(9) を求める.
各順列の候補 P′ に対して O(|P′|) 時間で復元を行う.
全体の計算量は O(|C| · |P| + |P| · |P|!) = O(|P| · (|C| + |P|!)).
C 問題 解説 原案,解説:えびちゃん
終
制作・著作
いつもの
ジャッジ解
TAB: 40 行,813 bytes
rsk0315: 39 行,811 bytes
tsutaj: 50 行,1209 bytes
First acceptance
on-site: acpc_chunithm 13:02
online: lyrically 11:39
Acceptance rate: 27/90 (30.00%)
C 問題 解説 原案,解説:えびちゃん

More Related Content

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

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

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 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
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: 赤黒そーるじぇむ
 
RUPC 2019 Day3 E: 往復文字列
RUPC 2019 Day3 E: 往復文字列RUPC 2019 Day3 E: 往復文字列
RUPC 2019 Day3 E: 往復文字列
 
RUPC 2019 Day3 C: 約数ゲーム
RUPC 2019 Day3 C: 約数ゲームRUPC 2019 Day3 C: 約数ゲーム
RUPC 2019 Day3 C: 約数ゲーム
 
RUPC 2019 Day3 B: 括弧を語る数
RUPC 2019 Day3 B: 括弧を語る数RUPC 2019 Day3 B: 括弧を語る数
RUPC 2019 Day3 B: 括弧を語る数
 
RUPC 2019 Day3 A: 情報検索
RUPC 2019 Day3 A: 情報検索RUPC 2019 Day3 A: 情報検索
RUPC 2019 Day3 A: 情報検索
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (10)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

ACPC 2019 Day3 C: カニサル暗号

  • 1. C 問題 解説 原案,解説:えびちゃん ACPC 2019, Day 3 C 問題 解説 原案,解説:えびちゃん
  • 2. 問題概要 {0, 1, . . . , 9} からなる順列 P と非負整数 D があり,長さが D の 桁数と等しい文字列 C を次のように作る. D の上から i 桁目が j であるとき C の i 文字目は Pj である. このとき,C の先頭には余分な 0 がつくこともある. D を 109 + 7 で割った余り M と,文字列 C が与えられる. D としてありうる整数が存在する場合はそれを復元し,なければ -1 を出力せよ.1 ⩽ |C| ⩽ 105,0 ⩽ M < 109 + 7. C 問題 解説 原案,解説:えびちゃん
  • 3. 考察 std::next_permutation を知っていますか? 順列 P を全通り試してみることを考える. これは 10! = 3628800 通りある. 毎回 O(|C|) 時間かけて復元すると TLE しそう. どうしよう? C 問題 解説 原案,解説:えびちゃん
  • 4. 考察 各数字 i について,C 中の i を 1 に,それ以外を 0 に置き換えた ものを 109 + 7 で割った余りを求め,これを f(i) としてメモして おく. 例:C = 30386 0 → 01000, f(0) = 1000 3 → 10100, f(3) = 10100 6 → 00001, f(6) = 1 8 → 00010, f(8) = 10 各順列 P′ に対して (∑9 i=0 f(i) · Pi ) mod 109 + 7 を求め,それが M と一致すれば OK. C 問題 解説 原案,解説:えびちゃん
  • 5. コーナーケース leading-zero の扱いには注意. 先頭が 0 の解はだめ? → D = 0 のとき墜ちそう. → これのせいで一発 AC なし. leading zero がある解を見つけた時点で -1 を出力? → 例:以下は両方 469 と合同. 0000000000000000469 6666666666666666809 C 問題 解説 原案,解説:えびちゃん
  • 6. まとめ・計算量 O(|C| · |P|) 時間かけて f(0), f(1), . . . , f(9) を求める. 各順列の候補 P′ に対して O(|P′|) 時間で復元を行う. 全体の計算量は O(|C| · |P| + |P| · |P|!) = O(|P| · (|C| + |P|!)). C 問題 解説 原案,解説:えびちゃん
  • 7. 終 制作・著作 いつもの ジャッジ解 TAB: 40 行,813 bytes rsk0315: 39 行,811 bytes tsutaj: 50 行,1209 bytes First acceptance on-site: acpc_chunithm 13:02 online: lyrically 11:39 Acceptance rate: 27/90 (30.00%) C 問題 解説 原案,解説:えびちゃん