Luogu P3917異或序列

2021-08-22 15:04:47 字數 1005 閱讀 5169

思路:把序列轉換成一顆n+1個節點n條邊邊權分別為a1 a2 ....an的樹(鏈),每乙個區間相當於樹上的一條路徑,那麼問題就轉換為求樹上任意兩點間路徑的異或和,令dis[i]為根節點到i的路徑異或和,對於兩個點u和v,dis[u]^dis[v]對答案的貢獻為

顯然,第i位為0和第i位為1 的兩個數異或才會對答案有貢獻,另cnt[i]為在第i位為1的數量,那麼在第i位異或為1的方案數就是

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define m(a,b) memset(a,b,sizeof(a))

#define pb push_back

const int maxn = 100000+10;

const ll mod = 1000000007;

struct edge e[maxn<<1];

int head[maxn],tot;

ll dis[maxn],cnt[maxn];

ll p[40];

void addedge(int u,int v,ll val)

void dfs(int u)

dfs(v);

}return ;

}int main()

int n;

scanf("%d",&n);

tot=0;

for (int i=1;i<=n+1;++i)

for (int i=1;i<=n;++i)

dis[1]=0;

dfs(1);

ll ans=0;

++n;

for (int i=0;i<32;++i)

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

return 0;

}

P3917 異或序列

p3917 異或序列 暴力字首異或列舉每乙個區間,再求和,60分。正解 按每一位來做 對於區間 l,r 如果它對答案有貢獻,區間中1的個數一定是奇數,可以按每一位取 1 1 include2 include3 include4 include5 include6 include7 include8 ...

二進位制亂搞 Luogu3917 異或序列

題面 luogu3917 我的做法好像比較傻。看到這種題首先想到字首。首先字首xor是不是很資辭?我的做法呢就是先把所有數按二進位制位拆開,然後每一位都做兩次字首。首先對數字做一次字首xor,記到 s 陣列裡,再對s陣列做一次字首和,記到ss 裡。然後我們可以對於每一位列舉起始位置i,然後從i開始向...

問題 A 異或序列

時間限制 1 sec 記憶體限制 128 mb 提交 188 解決 86 提交 狀態 討論版 命題人 admin 題目描述 已知乙個長度為n的整數數列a1,a2,an,給定查詢引數l r,問在al,al 1,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y l x y r 滿足a...