bzoj 2844
被noip模擬賽題弄自閉了quq。
因為本題要求異或,所以自然地構造出線性基,假設本題中給出的數有$n$個,而我們構造出的線性基大小為$m$,那麼每乙個可以異或出來的數相當於出現了$2^$次。
可以把那些已經存在於異或空間中的數看成$0$,因為我們一共能憑湊出$2^m$個不同的異或值,剩下的$n - m$個數相當於可選可不選,所以每乙個值有$2^$種方案異或上乙個$0$。
假設排名為$k$,答案就是$k*2^$。
時間複雜度$o(nlogn)$。
code:
#include #includeview codeusing
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;
}
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...