一本通1646GT 考試

2022-05-08 01:54:09 字數 3775 閱讀 9850

時間限制: 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 100 

111

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 所以,本身沒有必要使用高精度,但是如果本題目使用高精度來計算。則需要運用大整數的相關技巧來解決這個問題了。...