異或字首和 夢境

2021-10-10 01:21:00 字數 2779 閱讀 2045

題目描述

相信你也和 oier-kry 一樣,碼了幾行**,就輕鬆搞定其等價電阻的值。

kry 忽然間意識到不能總是不幹正經事,聯賽馬上就來了, 該整理下 u 盤,好好複習總結下,於是

插上 u 盤,開始翻閱以前學習的資料。

由於前面的更換教室地板,再加上剛才解決電路連線問題, kry 有點累了,不知道**來的睏意,

在學習壓力這麼大的情況下,居然不知不覺的睡著了„„

kry 在夢裡回到了初中時代, 彷彿感覺好像是 mir.z 在教室前面講解聯賽的題目,但又感覺不是,

這個夢怎麼這麼不真實。 難道 mir.z 講的題目和今年聯賽有關, kry 努力的回想著。由於 kry 想讓夢

境清晰一點,著急的一下子從夢裡驚醒了。 隱約只記得 mir.z 所講的題目大概,具體描述如下:

有乙個整數序列,暫且將其稱為 xorbonacci 序列。序列中的第 n 個元素用 x[n]表示。該序列

按照以下方式遞迴定義:

x[1]=a1,

x[2]=a2,

„„„x[k]=ak;

x[n]=x[n-1]⊕ x[n-2]⊕„⊕xn-k

mir.z 將會提出 q 次詢問,每次詢問給出兩個整數 l 和 r。而每次詢問的答案即以下式子的值:

x[l]⊕x[l+1]⊕„„„⊕ x[r-1]⊕x[r]。注意:題目中的符號"⊕ "在 kry 的夢裡應該是 xor 異或。(ps:

pascal 語言異或運算子是 xor, c 語言或者 c++語言異或運算子是^)

oier 們抓緊解決這個小題吧,萬一聯賽要是真的出呢?那豈不是賺到了。

輸入第 1 行輸入包含乙個整數 k;

接下來的一行包含 k 個整數,第 i 個整數 ai 表示 xorbonacci 序列中的第 i 個元素;

接下來一行包含乙個整數 q;

接下來的 q 行,每行包含兩個整數 l[i]和 r[i],表示 mir.z 第 i 次詢問的下標區間;

輸出輸出共 q 行,第 i 行輸出 mir.z 的第 i 次詢問的結果。

樣例輸入 copy

41 3 5 7

32 2

2 51 5

樣例輸出 copy

3 1 0

提示【輸入樣例 2】

53 3 4 3 2

41 2

1 35 6

7 9【輸出樣例 2】

0 4 7 4

【資料規模】

對於 30%的資料: 1≤k≤5,000; 1≤q≤5,000; 1≤l[i]≤r[i]≤5,000; 1≤ai≤5,000;

對於 50%的資料: 1≤k≤100,000; 1≤q≤100,000; 1≤l[i]≤r[i]≤500,000; 1≤ai≤5,000;

對於 100%的資料: 1≤k≤100,000; 1≤q≤100,000; 1≤l[i]≤r[i]≤1018; 1≤ai≤1018;

根據字首和,可以推出異或字首和預處理,即:

∑ i=

1n⊕a

i=∑i

=1n−

1⊕ai

+a

n\sum\limits_^n \oplus a_i = \sum\limits_^ \oplus a_i + a_n

i=1∑n​

⊕ai​

=i=1

∑n−1

​⊕ai

​+an

​則區間[l,

r]

[l,r]

[l,r

]的答案為:

∑ i=

1r⊕a

i⨁∑i

=1l−

1⊕ai

\sum\limits_^r \oplus a_i \bigoplus \sum\limits_^ \oplus a_i

i=1∑r​

⊕ai​

⨁i=1

∑l−1

​⊕ai

​根據異或的性質:偶數次異或相同的數等於000.

則:∑i=1

k+1⊕

ai=∑

i=00

=0

\sum\limits_^ \oplus a_i = \sum\limits_^ = 0

i=1∑k+

1​⊕a

i​=i

=0∑0

​=0(其中k

<

nk < n

k於是推出:

∑ i=

1k+e

⊕ai=

∑i=1

(k+e

)mod(e

+1)⊕

ai

\sum\limits_^\oplus a_i = \sum\limits_^ (e+1)} \oplus a_i

i=1∑k+

e​⊕a

i​=i

=1∑(

k+e)

mod(e+

1)​⊕

ai​然後帶入公式求解,注意暴int

\text

int。

#include

#define re register

typedef

long

long ll;

const

int maxn =

1e5+7;

ll n,p,l,r,a[maxn]

,sum[maxn]

;int

main()

return0;

}

thinks by-vibrant72.

子段異或(異或字首和)

傳送門 第一行乙個整數 n 代表數列長度。第二行 n 個整數,代表數列。輸出乙個整數,代表答案。示例1 複製5 1 2 3 2 1 複製 2 子段 1,3 和子段 3,5 是合法子段。首先你得知道乙個知識點就是 如果sum i 為陣列a的前i項的異或和,就是說sum i a 1 a 2 a 3 a ...

HDU 5968 異或密碼 字首異或

給出乙個長為n的陣列a,給出m個質詢,每個質詢給出乙個數字,需要找到序列a中所有連續子串行的異或結果中與質詢數字差的絕對值最小的乙個,輸出最長的這種連續子串行的長度 異或字首和 暴力 我們知道乙個數異或自己即抵消異或效果 比如a b a b a a b b 那麼我們存下字首和之後,想要求i j的異或...

NC14247 Xorto(異或 字首和)

對於異或的題目,很多都跟字首和放在一起,比如說這題,讓你求不相交區間異或值相等的個數 很容易想到用字首和表示區間,現在考慮如何做到不相交並且不重複計算 1.二維迴圈,第一維從1開始,第二維乙個用來統計,乙個用來更新 統計的時候,從i開始到n,把這段裡面的所有區間的異或值,都看看前面有沒有相等的,之後...