RUPC2016 Day3 2016/03/08
RUPC2016 Day3
G: Destiny Draw
運命力
1
原案:井上
解説:井上
問題文:井上
解答:井上、栗田
RUPC2016 Day3 2016/03/08
問題概要
上から順に 1 ~ N の番号がついている

カードの山がある
K 種類のシャッフルが可能である
K種類のうちi番目のシャッフルでは上か
らai枚目からbi枚を抜き、上に重ねる。
シャッフルはそれぞれ ti 秒を要する。
ちょうど T 秒のシャッフルの後、一番上の
カードを C にする方法は何通りあるか。
10
9
+7で割った余りを出力せよ。
制約: 2 ≦ N ≦ 40, 1≦ K ≦ N(N+1)/2,
1≦ ti ≦5, 1≦ T ≦ 10
6
2
RUPC2016 Day3 2016/03/083
1
ai
ai-1
ai+bi-1
ai+bi-1
N
1
ai
ai-1
ai+bi-1
ai+bi-1
N
ai-1
bi
i番目のシャッフル
問題概要
RUPC2016 Day3 2016/03/08
TLE解法(1)
全探索
今t秒経過しているとすると、k番目の
シャッフルによって時間はt+tkになる
各時点での山札の状態を記憶しながら
シミュレーションしていき、時間がTに
なったときに一番上がCなら答えをイン
クリメント
各時点で選択肢がK+1通りあり、シャッフ
ルのシミュレーションにO(N)かかる。分
岐の深さは最大Tなので、O(NKT
)
4
RUPC2016 Day3 2016/03/08
TLE解法(2)
最初C枚目にあった札が時刻tでどこにあるかだけわかれ
ばよい = DP
dp[t][p]: C枚目のカードが時刻tにおいて上からp枚
目にある
i番目のシャッフルをシミュレートすると、シャッフル前
のxi枚目がシャッフル後yiに行くという情報が得られる
dp[t+ti][yi] += dp[t][xi]
dpの計算時にシャッフルをシミュレートするとO(N)とな
るが、前処理でシミュレートすればO(1)にできる。全体
でO(KNT)
5
RUPC2016 Day3 2016/03/08
TLE解法(3)
シャッフルのシミュレーション結果
は順列になるので、これの順列行列
を考える
順列行列は遷移関係を表しているの
で、有向グラフの隣接行列とみなせ
る
同じtiの行列をまとめてしまっても
よい
6
RUPC2016 Day3 2016/03/08
順列行列のマージ
7
a=1,b=3,t=3
N=6
a=3,b=2,t=1 a=2,b=1,t=3 a=4,b=3,t=1
0 0 1 0 0 0
0 0 0 1 0 0
1 0 0 0 0 0
0 1 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 1 0 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
(3 4 1 2 5 6) (1 2 3 4 5 6) (2 1 3 4 5 6) (4 5 6 1 2 3)
0 0 1 1 0 0
0 0 0 1 1 0
1 0 0 0 0 1
1 1 0 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1
1 1 0 0 0 0
1 1 0 0 0 0
0 0 2 0 0 0
0 0 0 2 0 0
0 0 0 0 2 0
0 0 0 0 0 2
t=1 t=3
RUPC2016 Day3 2016/03/08
TLE解法(3)
この行列をTLE解法(2)のDPに応用すると
O(max(ti)N2
T) → まだ少し大きい

















8
RUPC2016 Day3 2016/03/08
想定解法
この行列をTLE解法(2)のDPに応用する
とO(max(ti)N2T) → まだ少し大きい
dpを拡張する
dp[t][v][p]: 初期にv枚目にあった
札が時刻tにおいてp枚目にある
こうすると、遷移は行列積を用いて書
ける(隣接行列の積がkステップで行け
るところを表すのと同じ)
9
RUPC2016 Day3 2016/03/08
解法(4)
漸化式を明示すると以下のようになる
dp[i] = A1×dp[i-1] + A2×dp[i-2] +
A3×dp[i-3] + A4×dp[i-4] +
A5×dp[i-5]
Atiは先述の時刻ti毎にまとめた順列行列
行列の5項間漸化式になったので、行列の行
列を作って行列累乗のテクニックを用いる
行列サイズが(max(ti)*n)×(max(ti)*n)
なので、O((max(ti)*n)3
logT) → 間に
合う
10
RUPC2016 Day3 2016/03/08
5項間漸化式の行列表現
11
dp[T+4]
dp[T+3]
dp[T+2]
dp[T+1]
dp[T]
A1 A2 A3 A4 A5
I O O O O
O I O O O
O O I O O
O O O I O
=
dp[4]
dp[3]
dp[2]
dp[1]
dp[0]
×
dp[5]
dp[4]
dp[3]
dp[2]
dp[1]
A1 A2 A3 A4 A5
I O O O O
O I O O O
O O I O O
O O O I O
=
dp[4]
dp[3]
dp[2]
dp[1]
dp[0]
×
T
※IはN×Nの単位行列、
OはN×Nの零行列

More Related Content

PDF
RUPC2014_Day2_C
PDF
ACPC 2018 Day3 F: 01 文字列と窓 (Binary String with Slit)
PDF
RUPC2014_Day2_I
PDF
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
RUPC2014_Day2_C
ACPC 2018 Day3 F: 01 文字列と窓 (Binary String with Slit)
RUPC2014_Day2_I
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説

What's hot (6)

PDF
Rで時系列をスマートに捌く方法のご相談(Tokyo.R#09)
PDF
あなたの時計は大丈夫? 「想定外」だった日時の不具合(原本)
PDF
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
PPTX
Pythagorean
PDF
Pyramid
Rで時系列をスマートに捌く方法のご相談(Tokyo.R#09)
あなたの時計は大丈夫? 「想定外」だった日時の不具合(原本)
C89 Wi-Fi: ららら、(無線的に)素敵なComiket Space
Pythagorean
Pyramid
Ad

Viewers also liked (6)

PPTX
Государственные закупки для предпринимателей
Государственные закупки для предпринимателей
Ad

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

PDF
ACPC 2017 Day3 F: 掛け算は楽しい
PDF
ACPC 2019 Day3 F: 部分文字列分解
PDF
ACPC 2019 Day3 E: 総和の切り取り
PDF
HUPC 2019 Day1 F: グリッドの番号
PDF
HUPC 2019 Day1 E: 最短経路の復元
PDF
PDF
プログラミングコンテスト基礎テクニック
PDF
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 E: 総和の切り取り
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 E: 最短経路の復元
プログラミングコンテスト基礎テクニック

立命合宿2016Day3:G問題