【題目描述】
有一圈數,其數目為n個,定義一次操作為每個數變為原數圈中的自己與相鄰的兩個數這三個數的異或和,給出原陣列和操作次數,請算出最後的結果陣列。
【輸入資料】
輸入第一行包含兩個正整數n和k,分別表示陣列數目和操作次數。第二行$n$個整數。
【輸出資料】
僅包含一行n個整數。
樣例輸入:3 1
1 2 3
樣例輸出:0 0 0
資料範圍:
對於\(30%\)的資料,\(n\times k\leq 10^8\)
對於\(100%\)的資料,\(1\leq n\leq 10^5,1\leq k\leq 10^9\)
對於\(a_i\),進行一次操作後,會變為\(a_\)
$a_i$
\(a_\)
兩次操作後,會變為\(a_\)
$a_i$
\(a_\)
三次操作後,會變為\(a_\)
$a_$
\(a_i\)
$a_$
\(a_\)
四次操作後,會變為\(a_\)
$a_i$
\(a_\)
我們發現當操作次數為\(2^k\)時,\(a_i\)會變為\(a_}\)
$a_i$
\(a_}\)
由此,我們可以將\(k\)次操作進行二進位制分解,一定可以完全分解,將\(k\)降為\(log_k\),每次\(o(n)\)暴力操作,時間複雜度為\(o(n\times log_k)\)
\(code:\)
#includeusing namespace std;
#define il inline
#define vocaloid(v) (v>='0'&&v<='9')
template il void read(t &x)
}template il void write(t x)
int n,k,a[100039],b[10039];
int main()
} }for(int i=1;i<=n;i++) write(a[i]),putchar(' ');
return 0;
}
考試題題解
主講人igl albl 試題t2 t3 t1 t4 t5 暴力 dfs所有路徑,在使用clock的情況下預計 text 題意 給你一張有向圖,距離為 text 的正整數次冪的兩點間可以重新連一條長為 text 邊,求在此情況下的從起點到終點最短路。我們用 text 表示點 text 到點 text ...
考試題解集合
某天忽然發現自己的blog裡全是考試題解 那麼為什麼不鏈到一篇blog裡呢?避免首頁全是加密blog看起來不大友善,大概也會整齊一點。估計是個大工程但還是作死地開始啦。有些難題是單獨寫的,就不鏈了。密碼仍然是開機使用者名稱 入學年份 兩個班級,希望總是能比過去的自己更用心!2018 4月 14 17...
2020 11 24 考試題解
尋找最少步數,一看就知道是用廣搜。雖然我考場上用的時深搜 迭代加深 每次只能與上下左右的交換,如果直接暴力列舉,肯定超時,考慮優化。1 如果有乙個點和我們要交換的點顏色一樣,就沒必要換了。2 我們可以用狀壓,將每次的判斷從 o 16 變為 o 1 有這些就可以了,要想更進一步,可以用雙向搜尋 不會,...