2019牛客多校一 H XOR 線性基

2022-05-27 13:45:08 字數 1192 閱讀 8122

大意: 給定序列, 求所有異或和為$0$的子串行大小之和.

先求出線性基, 假設大小為$r$.

現任意求出一組線性基, 然後再暴力驗證該組線性基內的數即可.

#include #include #include #include #include #include #include #include #include #include #include #define rep(i,a,n) for(int i=a;i<=n;++i)

#define per(i,a,n) for(int i=n;i>=a;--i)

#define hr putchar(10)

#define pb push_back

#define lc (o<<1)

#define rc (lc|1)

#define mid ((l+r)>>1)

#define ls lc,l,mid

#define rs rc,mid+1,r

#define x first

#define y second

#define io std::ios::sync_with_stdio(false)

#define endl '\n'

#define db(a) (

ll qpow(ll a,ll n)

ll inv(ll x)

inline int rd()

//head

const int n = 1e5+10;

int n, vis[n];

ll a[n];

struct _

inline bool ins(ll x)

inline _ operator + (const _ &rhs) const

inline int chk(ll x)

} pre[n], suf[n];

int main()

if (pre[n].a[0]==n)

suf[n+1] = _();

per(i,1,n) (suf[i]=suf[i+1]).ins(a[i]);

int sum = 0;

rep(i,1,n)

} int ans = sum*qpow(2,n-pre[n].a[0]-1)%p;

printf("%d\n", ans);

}}

2019牛客多校第一場H XOR 線性基

給出n個數的集合a 找出乙個子集s滿足s中的所有元素異或後為0 mod 1000000007 求 s 線性基介紹 算每個元素出現在滿足要求的集合的次數,也就是每個元素對答案的貢獻。所以先求出線性基d1 對於線性基以外的元素,必然可以由線性基的異或和表示,所以完全為線性基外元素的異或和也仍然可以由線性...

2019牛客多校第一場 H XOR

複習線性基複習了好久。這題的關鍵是把異或為0的集合的大小之和轉化為乙個數字會在多少個異或為0的集合 現,然後每個數字的這個值加起來就行。先求乙個線性基,其中插入了r個數字,那麼剩下的n r個數字的任意組合異或都可以由線性基中的一些數異或表示,那麼它們異或起來就為0.考慮線性基外的乙個數字,我先欽定乙...

2019牛客多校第九場

由題意可設x y kp bx y kp b x y kp b代入第二個式子中可以得到kpx bx x2 c mod kpx bx x 2 equiv c mod kpx bx x2 c modp p p 第一項是p的倍數可以約掉,所以有x2 bx c 0 m od x 2 bx c equiv 0 ...