異或和之和 組合數學

2021-10-06 06:19:11 字數 1083 閱讀 3622

傳送門

思路:考慮每位對答案的貢獻,因為最大為2

182^

218,所以最大一共64位。

儲存每乙個1的個數,貢獻產生只能出現兩種情況

p os

1:

pos1:

pos1

:乙個1,兩個0.

p os

2:

pos2:

pos2

:三個1。

然後用組合數和加法原理對貢獻求和即可。

即第i

ii位的貢獻ans

i=c(

a[i]

,3)+

c(n−

a[i]

,2)×

a[i]

ans_i=c(a[i],3)+c(n-a[i],2)\times a[i]

ansi​=

c(a[

i],3

)+c(

n−a[

i],2

)×a[

i] ps:

ps:ps

:計算組合數除法時需要用到逆元。

ac**:

#include

using

namespace std;

typedef

long

long ll;

const

int n=

2e5+

5,mod=

1e9+7;

int a[

100]

;ll ksm

(ll a,ll n)

return ans;

}ll inv

(ll x)

ll f

(ll x,ll y)

intmain()

} ll ans=0;

for(

int i=

0;i<

64;i++

)printf

("%lld\n"

,ans)

;return0;

}

異或和之和 異或問題

題目 有n個數,任選3個進行異或,求出所有三元組的異或和的和 普通計算是 o n 3 但是發現,對於異或的運算,就轉換為二進位制的運算,把每乙個陣列轉換為二進位制,再拆分,當且僅當 1 1 1 和 1 0 0 時,答案才為1,否則都是0,也就是說,只有這兩個情況是由貢獻的 把每個數位化為二進位制,然...

異或和之和

異或和之和 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 給乙個陣列,陣列內有 個正整數。求這些數任取3個數異或運算後求和的值。有幾個個三元組,計算這些三元組內部異或,之後求和。具體操作可以見樣例描述...

Vijos 連續數之和 組合數學

描述 有n個正整數排成一行。你的目的是要從中取出乙個或連續的若干個數,使它們的和能夠被k整除。例如,有6個正整數,它們依次為1 2 6 3 7 4。若k 3,則你可以取出1 2 6,或者2 6 3 7,也可以僅僅取出乙個6或者3使你所取的數之和能被3整除。當然,滿足要求的取法不止以上這4種。事實上,...