時間限制: 1000 ms 記憶體限制: 524288 kb
阿申準備報名參加 gt 考試,准考證號為 n
'>
n 位數 x1x
2⋯xn
(0≤x
i≤9)
'>x1x2⋯xn(0≤xi≤9)
,他不希望准考證號上出現不吉利的數字。
他的不吉利數字 a1a
2⋯am
(0≤a
i≤9)
'>a1a2⋯am(0≤ai≤9)
有 m'>
m 位,不出現是指 x1x
2⋯xn
'>x1x2⋯xn
中沒有恰好一段等於 a1a
2⋯am
'>a1a2⋯am,a1
'>a
1和 x
1'>
x1 可以為 0
'>
0。第一行輸入 n,m
,k'>n,m,k
,接下來一行輸入 m
'>
m 位的數。
阿申想知道不出現不吉利數字的號碼有多少種,輸出模 k
'>k
取餘的結果。
4 3 100111
81對於全部資料,1≤n
≤109,
1≤m≤
20,2≤
k≤1000
'>1≤n≤109
,1≤m≤20,2≤k≤1000。1
≤n≤10
9,1≤
m≤20,
2≤k≤
1000
'>sol:此題應該是先想到暴力的做法再用矩陣乘法優化的1≤
n≤109
,1≤m
≤20,2
≤k≤1000
'>所以暴力的思想很重要1≤
n≤109
,1≤m
≤20,2
≤k≤1000
'>dp[i][j]表示到第i位,匹配了j個的方案數1≤
n≤109
,1≤m
≤20,2
≤k≤1000
'>先預處理出f[i][j]表示已經匹配了i個,加乙個數字變成匹配了j個方案數,i,j<=m-1,用kmp搞搞1≤
n≤109
,1≤m
≤20,2
≤k≤1000
'>轉移就不難了,dp[i][j]+=dp[i-1][k]*f[k][j],是不是很像矩陣乘法2333
#include using暴力namespace
std;
typedef
intll;
inline ll read()
while
(isdigit(ch))
return (f)?(-s):(s);
}#define r(x) x=read()inline
void
write(ll x)
if(x<10
)
write(x/10
); putchar((x%10)+'0'
);
return;}
#define w(x) write(x),putchar(' ')
#define wl(x) write(x),putchar('\n')
const
int n=100005,m=25
;int
n,m,mod;
int num[25],f[25][25
];int
dp[n][m];
inline
void ad(int &x,int
y)int next[25
];inline
void
pre_f()
for(i=0;i)
}/*for(i=0;i*/
return;}
intmain()
pre_f();
dp[0][0]=1
;
for(i=1;i<=n;i++)}}
for(i=0;i) ad(ans,dp[n][i]);
wl(ans);
return0;
}/*input
4 3 100
111output
81*/
#include using矩陣乘法namespace
std;
typedef
intll;
inline ll read()
while
(isdigit(ch))
return (f)?(-s):(s);
}#define r(x) x=read()inline
void
write(ll x)
if(x<10
)
write(x/10
); putchar((x%10)+'0'
);
return;}
#define w(x) write(x),putchar(' ')
#define wl(x) write(x),putchar('\n')
const
int n=100005,m=25
;int
n,m,mod;
int num[25],f[25][25
];int ans[25][25],power[25][25],a[25][25],c[25][25
];inline
void ad(int &x,int
y)int next[25
];inline
void
pre_f()
for(i=0;i)
}/*for(i=0;i*/
return;}
intmain()
pre_f();
ans[
0][0]=1
;
for(i=0;i<=m-1;i++) power[i][i]=1
; memmove(a,f,
sizeof
a);
while
(n)
memmove(power,c,
sizeof
power);
}memset(c,
0,sizeof
c);
for(i=0;i<=m-1;i++) for(j=0;j<=m-1;j++) for(k=0;k<=m-1;k++)
memmove(a,c,
sizeof
a); n>>=1
; }
memset(c,
0,sizeof
c);
for(i=0;i<=0;i++) for(j=0;j<=m-1;j++) for(k=0;k<=m-1;k++)
memmove(ans,c,
sizeof
ans);
for(i=0;i0
][i]);
wl(sum);
return0;
}/*input
4 3 100
111output
81input
1000000000 19 9973
1010100110011000001
output
5753
*/
佇列(一本通)
這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...
情感修煉一本通
實踐準則 經驗親密關係構成要素 了解 關心 相互依賴性 相互一致性 信任以及承諾 親密的伴侶彼此間有著廣泛而私密的了解。他們熟知彼此的經歷 愛好 情感和心願,而且一般不會把這些資訊透露給其他人。親密的伴侶關心對方,彼此能從對方身上感受到更多的關愛。如果人們認為自己的伴侶了解 理解並欣賞自己,其親密程...
一本通 確定進製
注意一些細節問題就可以了。1 餘數必定小於進製數 2 注意判斷數字範圍 1 p,q,r 1000000 開始以為p q會很大,但是實際 p q 1000000 因為p q r 10000000 所以,本身沒有必要使用高精度,但是如果本題目使用高精度來計算。則需要運用大整數的相關技巧來解決這個問題了。...