兩個核心公式 :
1【l,r】=【1,r】^【1,l-1】
2 a^a=0(充要)
題意要求求出異或值為0的子段數,我們可以通過記錄每個值的字首異或值來推出某個區間的異或值,如:【2,3】的異或值可以通過【1,3】^【1,1】來推出
,並且當且僅當【1,3】^【1,1】==0時,【2,3】==0。
可何時【1,3】^【1,1】才能等於0呢?
結合公式2,我們可以得知,當【1,3】= =【1,1】時,【2,3】==0。
因此我們可以將字首異或值排序,方便我們尋找相同異或值的字首區間。
再對異或值相同的區間個數n求組合c(2,n)即可(也就是n個里取兩個的所有取法)
**如下
#include
#include
#include
#define ll long long
using
namespace std;
int n;
ll m[
200001];
ll ans =0;
intmain()
sort
(m +
1, m +
1+ n)
;for
(ll i =
1,j=i;i <= n; i=j+1)
cout << ans
}
但這串**是無法ac的,因為我們忘了考慮【l,r】中l=1的情況,此時我們要想要原來一樣求出【l,r】,必須求得【1,0】,但這個區間顯然是不存在的。
因此,我們在維護字首異或值時直接判斷其是否符合題意即可。
ac**如下
#include
#include
#include
#define ll long long
using
namespace std;
int n;
ll m[
200001];
ll ans =0;
intmain()
sort
(m +
1, m +
1+ n)
;for
(ll i =
1,j=i;i <= n; i=j+1)
//i和j一定得開long long否則會溢位
cout << ans
}
2020牛客寒假演算法基礎集訓營
長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...
2020牛客寒假演算法基礎集訓營1
h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...