4738 迷惑數字統計

2021-10-03 08:54:37 字數 1877 閱讀 9665

題目描述

首先定義什麼是迷惑數字。

對於乙個 2n2n

2n位的數字 x

xx,將其排列後劃分成兩個數字,它的前 n

nn 位構成數字 a

aa,後 n

nn 位構成數字 b

bb. 如果 a+b

a+ba+

b 是 10

1010

的冪,則數字 x

xx 是迷惑數字。注意 a

aa 和 b

bb 可能有前導 0

00 。

比如 46

4646

是乙個迷惑數字 (4+

6=10)

(4+6=10)

(4+6=1

0),9820

9820

9820

是乙個迷惑數字 (98+

02=

100)

(98+02=100)

(98+02

=100

),08362090

08362090

083620

90也是乙個迷惑數字 (

6020

+3980

=10000

)(6020+3980=10000)

(6020+

3980

=100

00) 。

現在給你乙個 2n2n

2n位的數字,其中有些數字丟失了,丟失的數字用 『?』 表示。你需要統計將這些問號替換成數字以獲得迷惑數字的方案數。

題解考場上不知道在想什麼,乙個數字用到問號的組合數不能分開算!!!

根據問號個數沒有很多,我們可以列出 dp

\text

dp : f[i

]f[i]

f[i]

表示用了 i

ii 個問號的方案數,然後我們列舉哪兩個數相加為 10

1010

,剩下的相加要麼為 9

99 ,要麼為 0

00 (即 0

00 和 0

00 配對),於是列舉一下一對當中的乙個用了多少問號就知道另乙個用了多少個問號,揹包轉移即可。

**

#include

using

namespace std;

const

int p=

1e9+

7,n=

1005

;int n,q,a[10]

,c[n]

[n],s,f[2]

[n],b[10]

;char ch[

100005];

intmain()

c[0][

0]=1

;for

(int i=

1;i<=q;i++

)for

(int i=

1,x,y,u,v,w,x,y;i<=

5;i++

) x^=1

;y^=1;

} u=a[0]

+b[0

];v=a[9]

+b[9]-

(i==1)

;for

(int j=

0;j<=q;j++

)for

(int k=

0;k+j+a[9]

<=q;k++)if

(u+j>=v+k+a[9]

&&!((u+j-v-k-a[9]

)&1)

)(s+

=1ll

*f[x]

[q-j-k-a[9]

]*c[j+k+a[9]

][j]

%p)%

=p;}

cout

}

4738 迷惑數字統計

題目描述 首先定義什麼是迷惑數字。對於乙個 2n 位的數字 x 將其排列後劃分成兩個數字,它的前 n 位構成數字 a 後 n 位構成數字 b 如果 a b 是 10 的冪,則數字 x 是迷惑數字。注意 a 和 b 可能有前導 0 比如 46 是乙個迷惑數字 4 6 10 9820 是乙個迷惑數字 9...

數字DP 數字統計

題目 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。數字dp 1 分情況,逐位討論。2 模型 計算在 l,r 中有多少個數滿足條件。3 套路 將問題轉化為 1,r 1,l 1 只需回答 1,x 的詢問即可。思路1.算出 1,x 1 按位拆分,為後面做鋪墊 ...

數字統計 區間數字

time limit 1 sec memory limit 128 mb submit 8 solved 3 submit status web board 一本書的頁碼從自然數1 開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都不含多餘的前導數字0。例如,第6 頁用數字6 表示,而...