BZOJ2844 albus就是要第乙個出場

2022-05-09 11:00:13 字數 965 閱讀 2878

嘟嘟嘟(洛谷)

這道題算是利用了線性基的乙個性質:對於大小為\(k\)的線性基中亦或出來的乙個數\(x\),那麼用原陣列的數亦或出來的所有數中,\(x\)出現了\(2 ^ \)次。

那麼就可以算出線性基中比\(x\)小的數有多少個(記為\(cnt\)),然後答案就是\(cnt * 2 ^ + 1\)。

(其實我現在還不是特別懂)

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define enter puts("")

#define space putchar(' ')

#define mem(a, x) memset(a, x, sizeof(a))

#define in inline

typedef long long ll;

typedef double db;

const int inf = 0x3f3f3f3f;

const db eps = 1e-8;

const int maxn = 1e5 + 5;

const int maxn = 31;

const ll mod = 10086;

inline ll read()

while(isdigit(ch))

if(last == '-') ans = -ans;

return ans;

}inline void write(ll x)

int n;

int p[maxn];

in void insert(int x) }}

int b[maxn], cnt = 0;

in ll quickpow(ll a, ll b)

int main()

BZOJ2844 albus就是要第乙個出場

傳送門 給定乙個含 n 個自然數的集合s,將 2s中所有集合的所有元素的異或和從小到大排列 下標從 1 開始 求ta r在其中第一次出現的下標 保證給出的數出現過 對 10086 取模.1 n 105 ai 109.首先tar 0的情況最好先特判掉.然後我們要求的是從 s 中取若干元素 可以不取 異...

bzoj 2844 albus就是要第乙個出場

首先就是乙個線性基。然後不能放進去的相當於0,然後列舉前多少位和m相同,那麼後一位比m小的方案累加入答案即可。ac 如下 include define mod 10086 using namespace std int n,m,cnt,bin 35 bs 35 s 35 bool ins int x...

BZOJ2844 albus就是要第乙個出場

給出a陣列,共有n個數,你可以選其中一些出來xor 至少乙個數 所以可能的xor結果值排序後去重,問你排在第k個的結果值是多少.線性基有個性質 線性基內任意集合異或結果唯一,而所有數異或0還是本身 所以每個數字出現的個數就等於 1 異或值為0的集合個數 2 n cnt 所以問題就轉化為求線性基有效位...