Luogu 4869 albus就是要第乙個出場

2022-06-13 02:39:09 字數 1118 閱讀 9671

bzoj 2844

被noip模擬賽題弄自閉了quq。

因為本題要求異或,所以自然地構造出線性基,假設本題中給出的數有$n$個,而我們構造出的線性基大小為$m$,那麼每乙個可以異或出來的數相當於出現了$2^$次。

可以把那些已經存在於異或空間中的數看成$0$,因為我們一共能憑湊出$2^m$個不同的異或值,剩下的$n - m$個數相當於可選可不選,所以每乙個值有$2^$種方案異或上乙個$0$。

假設排名為$k$,答案就是$k*2^$。

時間複雜度$o(nlogn)$。

code:

#include #include 

using

namespace

std;

typedef

long

long

ll;const

int n = 1e5 + 5

;const

int m = 35

;const ll p =10086ll;

intn, q, a[n];

inline

void read(int &x)

namespace

lb v ^=p[i];}}

} using

namespace

lb;inline ll fpow(ll x, ll y)

return

res;

}int

main()

read(q);

int stk[m], top = 0

;

for(int i = 0; i <= 30; i++)

if(p[i]) stk[top++] =i;

ll ans =0ll;

for(int i = 0; i < top; i++)

if((q >> stk[i]) & 1

) ans += 1ll <

ans %=p;

printf(

"%lld\n

", (ans * fpow(2, n - top) % p + 1) %p);

return0;

}

view code

albus就是要第乙個出場

點此看題 首先考慮沒有重複 序列個數等於線性基個數 的情況,那麼問題就是求乙個值的排名 跟求排名的值差不多 ii位被異或為0 00,那我們就把這個值歸類到i ii位,設有w ww個多餘的值。如果乙個位置被選取了,那麼選奇數個數的子集方案數2 w2 w 2w,否則可以選當前位沒有被選取,那麼選偶數也是...

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