bzoj3687簡單題 dp bitset優化

2022-04-06 03:31:53 字數 1414 閱讀 1514

time limit: 10 sec  memory limit: 512 mb

submit: 861  solved: 399

[submit][status][discuss]

小呆開始研究集合論了,他提出了關於乙個數集四個問題:

1.子集的異或和的算術和。

2.子集的異或和的異或和。

3.子集的算術和的算術和。

4.子集的算術和的異或和。

目前為止,小呆已經解決了前三個問題,還剩下最後乙個問題還沒有解決,他決定把

這個問題交給你,未來的集訓隊隊員來實現。

第一行,乙個整數n。

第二行,n個正整數,表示01,a2….,。

一行,包含乙個整數,表示所有子集和的異或和。

21 3

6【樣例解釋】

6=1 異或 3 異或 (1+3)

【資料規模與約定】

ai >0,1

另外,不保證集合中的數滿足互異性,即有可能出現ai= aj且i不等於j

/*

設f[i]表示i出現在算術和中的次數,那麼對於a[j],有f[i]+=f[i-a[j]]。最後統計哪些數出現了奇數次即可。

*/#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 1000000000

using

namespace

std;

inline ll read()

while(ch>='

0'&&ch<='9')

return x*f;

}int ans,n,a[1005],b[1005],f[10005],bin[25

];void getans(int

x)void dfs(int k,int

last)

}void

solve1()

void

solve2()

intmain()

暴力 %%%黃學長

/*

這道題f[i]表示和為i的集合個數為奇數還是偶數,

f#include

#include

#include

#include

using

namespace

std;

bitset

<2000017>f;

intn,m,x,ans;

intmain()

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

printf(

"%d\n

",ans);

return0;

}

bzoj3687 簡單題 bitset優化揹包

給定乙個總和不大於2e6的數集,求子集的算術和的異或和。好像可以直接上01揹包dp。但是會tle。其實記錄的只是每個體積的狀態的奇偶,所以方程可以寫成dp i dp i dp i x dp i d p i dp i x 然後發現每乙個點都是異或上前面一定距離的數,所以我們可以把整個陣列往後移動x個然...

BZOJ2683 簡單題 題解

1.若n比較小,則可以用二維的樹狀陣列或線段樹來做,但是500000,空間開不下,於是考慮離線cdq。子矩陣的數字和表示為也就是二維字首和,因此乙個要查詢的子矩陣,對其有影響的矩陣為s x2 y2 s x2 y1 1 s x1 1 y2 s x1 1 y1 1 這四個字首子矩陣 所以,在沒有修改操作...

bzoj4915 簡單的數字題

傳送門 題解 出自第52屆imo試題第1題。首先第一問一定是4 樣例給你了啊 如果要你證明,我們不妨令a123 4那麼有s a1 a2 a3 a4 s 2 a1 2 a2 2 a3 2 a4 2 那麼有a3 2 a4 2 a3 2 a4 2 a1 2 a2 2 a3 2 a4 2 s 2,即a3 a...