點此看題
首先考慮沒有重複(序列個數等於線性基個數)的情況,那麼問題就是求乙個值的排名(跟求排名的值差不多)
ii位被異或為0
00,那我們就把這個值歸類到i
ii位,設有w
ww個多餘的值。如果乙個位置被選取了,那麼選奇數個數的子集方案數2
w2^w
2w,否則可以選當前位沒有被選取,那麼選偶數也是2
w2^w
2w,總方案數就是2n−
m2^
2n−m
,m
mm是重複的個數。
**也就不難了,仿照求排名的值。
#include
#define int long long
const
int jzm =
10086
;int
read()
int n,m,k,ans,p[40]
;void
ins(
int x)
x^=p[i];}
if(!x) m=m*
2%jzm;
}void
work()
signed
main()
printf
("%lld\n"
,(ans*m+1)
%jzm)
;}
Luogu 4869 albus就是要第乙個出場
bzoj 2844 被noip模擬賽題弄自閉了quq。因為本題要求異或,所以自然地構造出線性基,假設本題中給出的數有 n 個,而我們構造出的線性基大小為 m 那麼每乙個可以異或出來的數相當於出現了 2 次。可以把那些已經存在於異或空間中的數看成 0 因為我們一共能憑湊出 2 m 個不同的異或值,剩下...
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...