time limit:
6 sec memory limit:
128 mb
submit:
2254 solved:
934[submit][status][discuss]已知乙個長度為n的正整數序列a(下標從1開始), 令 s = , s 的冪集2^s定義為s 所有子
集構成的集合。定義對映 f : 2^s -> zf(空集) = 0f(t) = xor a[t] , 對於一切t屬於t現在albus把2^s中每個集
合的f值計算出來, 從小到大排成一行, 記為序列b(下標從1開始)。 給定乙個數, 那麼這個數在序列b中第1
次出現時的下標是多少呢?
第一行乙個數n, 為序列a的長度。接下來一行n個數, 為序列a, 用空格隔開。最後乙個數q, 為給定的數.
共一行, 乙個整數, 為q在序列b中第一次出現時的下標模10086的值.
31 2 313
樣例解釋:
n = 3, a = [1 2 3]
s =
2^s = , , , , , , }
f(空) = 0
f() = 1
f() = 2
f() = 3
f() = 1 xor 2 = 3
f() = 1 xor 3 = 2
f() = 2 xor 3 = 1
f() = 0
所以b = [0, 0, 1, 1, 2, 2, 3, 3]
資料範圍:
1 <= n <= 10,0000
其他所有輸入均不超過10^9
湖北省隊互測
[submit][status][discuss]
題解:問題即求子集異或和的某個數的排名;
線性基的性質:若$a,|a|=n$的線性基為$b$,$|b|=k$,則有$2^k$個不同的子集異或和,且每個會出現$2^$次;
由基的線性無關性可以知道有且僅有$2^k$個異或和互不相同;如果你關心乙個蒟蒻的不太嚴謹的證明的話這k個基是可以從$a_i$裡選出來的,只是我們為了好寫,一般插入就直接消元到某個陣列裡;
考慮他們的子集異或和s1,另外有$n-k$個數,可以被b中的向量唯一表示,考慮子集異或和s2 ;
s1 ^s2 也是一種合法的選法;
這樣有$
2^k * 2^ = 2^n$種 ,說明只有$2^n$且按照這種方式對應;
注意消元的兩個迴圈(line23 line24 )有順序;
複雜度;$ o(n log \ a_ + log \ a_) $
20181030
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #includeview code11#define run(i,l,r) for(int i=l;i<=r;i++)
12#define don(i,l,r) for(int i=l;i>=r;i--)
13#define ll long long
14#define inf 0x3f3f3f3f
15using
namespace
std;
16const
int n=100010 , mod=10086;17
int n,d[31
],q;
18void ins(int
x)26
else x^=d[i]; 27}
28}29int pw(int x,int
y)35
return
re;36}37
int query(int
x)47
}48 re=re*pw(2,n-cnt)%mod;
49return
re;50}51
intmain()
59int x;scanf("
%d",&x);
60 cout<
61return0;
62 }//
by tkys_austin;
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 所以問題就轉化為求線性基有效位...