description
阿申準備報名參加gt
g
t考試,准考證號為
n n
位數x1
x2....xn
(0≤x
i≤9)
' role="presentation" style="position: relative;">x1x
2....xn
(0≤x
i≤9)
x1x2....xn
(0≤x
i≤9)
,他不希望准考證號上出現不吉利的數字。他的不吉利數學a1
a2...am
(0≤a
i≤9)
a 1a
2...am
(0≤a
i≤9)
有m m
位,不出現是指x1
x2...xn
' role="presentation" style="position: relative;">x1x
2...xn
x1x2...xn
中沒有恰好一段等於a1
a2...am
a 1a
2...am
.a1a
1和x1
x
1可以為
0 0
input
第一行輸入n,
m,k' role="presentation" style="position: relative;">n,m
,kn,
m,k.接下來一行輸入
m m
位的數(n
≤109,
m≤20,
k≤1000
)' role="presentation" style="position: relative;">(n≤
109,m
≤20,k
≤1000)(
n≤109
,m≤20
,k≤1000)
output
阿申想知道不出現不吉利數字的號碼有多少種,輸出模
k k
取餘的結果.
sample input
4 3 100
sample output
solution以d
p[i]
[j]' role="presentation" style="position: relative;">dp[
i][j
]dp[
i][j
]表示前
i i
個字母已經確定,沒有出現過不吉利數字,且末尾與不吉利數字最多匹配了
j' role="presentation" style="position: relative;">j
j位的方案數,則答案即為∑j
=0m−
1dp[
n][j
] ∑j=
0m−1
dp[n
][j]
,由於已經匹配了
j j
位,假設要在後面加上乙個數字k(
0≤k≤
9)' role="presentation" style="position: relative;">k(0
≤k≤9
)k(0
≤k≤9
),暴力求出此時這j+
1 j+1
個數字與不吉利數字的最長匹配
t t
,只要t≠
m' role="presentation" style="position: relative;">t≠m
t≠m,那麼dp
[i][
j]d p[
i][j
]狀態即可轉移為dp
[i+1
][t]
d p[
i+1]
[t
],以此求出dp
[i] dp[
i]
到dp[i+1
] dp[
i+1]
的轉移矩陣,矩陣快速冪加速轉移即可
code
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
typedef
int m[22][22];
int n,m,mod;
char s[22];
void mul(m &a,m b)
for(int i=0;ifor(int j=0;jint main()
if(flag)break;
}if(i!=m)a[i][j]++;
}pow(a,n);
int ans=0;
for(int i=0;i0])%mod;
printf("%d\n",ans);
return
0;}
bzoj1009 GT考試 dp 矩陣快速冪
題意 構造乙個字串 數字0 9 不含乙個子串的個數 我這麼蒟蒻腫麼可能想到是dp嘛 定義f i j 表示當前構造了i位,與模式串p匹配了前j位的方案數 然後列舉下一位填什麼,然後乘上當前構造出來的和模式串匹配到k的方案數。即是f i 1 k f i j a j k 因為從j轉移到k,可以用的數字不一...
BZOJ 1009 GT考試 KMP 矩陣快速冪
題意 b為非法數字b 1 b m 其位數 20.某個數有n位,每位可以填入 0,9 n 1e9 問有多少種填數字方案,滿足n位中沒有非法數字m出現?先不考慮n範圍 則可以設定dp i j 表示放了合法放了前i位,其字尾j和非法的前j位相同的方法數.轉移狀態顯然是一位一位新增 顯然dp i 1 j 1...
bzoj1009矩陣快速面 kmp
其實kmp真的很次要,求長度為20的kmp感覺真的有點殺雞用牛刀 這題思路相當明確 一看題就是數字dp,一看n的大小就是矩陣 矩陣的構造用m m比較方便,本來想寫1 m的矩陣乘m m的,但是感覺想起來太麻煩就偷懶,沒想到1a了 log的速度的確可以,87ms賊快,好久沒見這麼短的執行時間了 1 in...