51Nod1407 與與與與

2021-08-09 13:28:03 字數 918 閱讀 8056

有n個整數,問從他們中取出若干個數字相與之後結果是0的有多少組。

答案比較大,輸出對於 1,000,000,007 (1e9+7)取模後的結果。

input

第一行輸入乙個整數n。(1<=n<=1,000,000).

第二行有n個整數a[0],a[1],a[2],…a[n-1],以空格分開.(0<=a[i]<=1,000,000)

output

對於每一組資料,輸出乙個整數。

input示例

3 2 3 3

4 0 1 2 3

output示例

0 10

題解 **

#include

#define mod 1000000007

#define inf 1000000005

#define pa pair

typedef

long

long ll;

using

namespace

std;

inline

int read()

while (ch>='0'&&ch<='9')

return x*f;

}int n,dp[1000005],ans,fac[1000005];

bool g[1000005];

int main()

for (int j=20;j>=0;j--)

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

if (i&(1

<1

<0]]-1;

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

printf("%d",(ans+mod)%mod);

return

0;}

容斥 51nod 1407 與與與與

這道題的方向不是o n o n o n 而是 o v o v o v 我們發現答案為 全集 an d mathrm and 有至少 1 11 位 0 00 的 an d mathrm and 後有至少 2 22 位 0 00 的 因此我們可以根據乙個數字 and mathrm and 操作後的位數來...

51nod1407 與與與與 容斥 DP

有n個整數,問從他們中取出若干個數字相與之後結果是0的有多少組。答案比較大,輸出對於 1,000,000,007 1e9 7 取模後的結果。n 1 06ai 106 n le10 6 a i le10 6 n 106a i 1 06很容易想到設f i 表示至少i個位置不為0的答案,我們容斥一下就能得...

與 , 與 , 與 的區別

首先 和 稱為布林運算子,和 稱為條件布林運算子。兩種運算子得到的結果完全相同,但得到結果的方式又乙個重要區別 條件布林運算子效能比較好。他檢查第乙個運算元的值,再根據該運算元的值進行操作,可能根本就不處理第二個運算元。如果 運算子的第乙個運算元是false,就不需要考慮第二個運算元的值了,因為無論...