BZOJ 3209 花神的數論題

2022-05-04 23:39:06 字數 969 閱讀 4527

[題目鏈結]

[演算法]

數字dp

記f[i][j][k]表示i位, 最高為為j , 有k個1的二進位制數有多少個

然後 , 計算1-n中 , 出現i個1的數有多少個

用快速冪將答案乘起來 , 即可

[演算法]

#includeusing

namespace

std;

typedef

long

long

ll;const ll maxn = 1e15 + 10

;const

int maxlog = 50

;const

int p = 10000007

;ll n;

ll ans[maxlog + 10

];ll f[maxlog + 10][2][maxlog + 10

];template

inline void chkmin(t &x , t y)

template

inline void chkmax(t &x , t y)

template

inline void read(t &x)

inline

void

preprocess()}}

}inline

void

calc(ll n)

reverse(a + 1 , a + len + 1

);

int cnt = 0

;

for (int i = 1; i <= len; i++)

else

continue

; }

}inline

intexp_mod(ll a , ll n)

return

res;

}int

main()

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...

bzoj 3209 花神的數論題

設 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個一的數的數目。容易...

BZOJ3209 花神的數論題

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