bzoj 3209 花神的數論題

2021-08-08 17:37:30 字數 1012 閱讀 4024

設 sum(i) 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n ,,求∏i

=1ns

um(i

) 枚下1的個數,那麼題目就轉換成了1~n有多少個數的二進位制有x個一。

這就很容易數字dp了。 f[

i][j

] 表示i位第一位為1,共j個一的數的數目,g[

i][j

] 表示i位第一位為0,共j個一的數的數目。

容易得到轉移方程: f[

i][j

]=g[

i−1]

[j−1

]+f[

i−1]

[j−1

] g[

i][j

]=f[

i−1]

[j]+

g[i−

1][j

] 然後就沒有然後了。

code:

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const ll mod=10000007;

ll f[70][70],g[70][70],n;//開頭位0/1,i位, j個1的數的個數

ll sum[70];

int a[70],len=-1;

ll solve(ll a,ll b)

return ans;

}int main()

scanf("%lld",&n);n++;

for(int i=60;i>=0;i--)

if((1lla[i+1]=1;n-=(1ll}

ll ans=1;

for(int i=1;i<=60;i++) (ans*=solve((ll)i,sum[i]))%=mod;

printf("%lld",ans);

}

bzoj3209 花神的數論題

題意 求sum 1 sum 2 sum n 其中sum x 表示x的二進位制表達中1的數量。答案模10 7 7。n 10 15。考慮列舉sum x 的值為t,然後求有多少個不大於n的正整數的二進位制表達恰好有t個1,設這個答案為f t 這一部分可以用數字dp來實現。例如要求解1.12,可以將其分成1...

BZOJ3209 花神的數論題

bzoj3209 花神的數論題 背景眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj oi cf tc 當然也包括 ch 啦。描述話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要...

bzoj3209 花神的數論題

背景 眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj oi cf tc 當然也包括 ch 啦。描述話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要問你派 sum i 也就是 s...