大意: 給定序列, 求所有異或和為$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 ...