題目描述
相信你也和 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,把這段裡面的所有區間的異或值,都看看前面有沒有相等的,之後...