2020秋招筆試 複雜異或問題

2021-10-09 11:16:13 字數 1268 閱讀 7531

給定乙個序列an,下標從1開始直到n,定義了以下式子:

現在要求下式的值:

小提示

樣例解釋

這裡考察的是異或操作。

首先注意到異或是支援交換律的,可將待求解的值分為兩個部分:將ai全部交換到一起求出異或值,這是由輸入序列確定的部分結果;還剩下乙個n×n的餘數矩陣,它們整體異或到一起構成輸入序列個數確定的部分結果。

輸入序列的異或結果十分簡單,遍歷一次輸入序列,取出相異或即可,但剩下的餘數矩陣如何處理?

再次注意到,餘數矩陣在列方向上是有週期規律的:第列是0的迴圈序列,第列是1,0的迴圈序列,第列是1,2,0的迴圈序列,第列是1,2,3,0的迴圈序列,……第n列是1,2,3……n-1,0的迴圈序列。

那麼先將列方向的餘數相異或,第i列,偶數次迴圈序列相異或的結果都是0,可以抵消掉,剩餘的就有單個1,2……i-1,0 序列、不完整的序列 以及單個多餘的1,2……i-1,0 和乙個不完整序列 1,2,……的組合這三種情況,恰好我們能夠根據列序號 i總列數 n相對關係知道是何種剩餘情況。

csdn

這裡求餘數矩陣單列異或結果的時間複雜度是 o(1) 的,求 n 列餘數矩陣異或結果時間複雜度是o(n)的,而求解 ai 異或時間複雜度是 o(n) 的,因此整個解法是 o(n) 的。

public

class

solution

//剩餘不足乙個序列

else

}return bn;

}private

intxorfrom0ton

(int n)

}

通過測試用例57%,報錯執行超時,因此可能有特殊用例沒有考慮到。

2020屆秋招中興筆試題

在本人堅持不懈的努力刷題下,終於發現題目的 了。leetcode題目為 49.字母異位詞分組,有興趣的同學可以對比學習。題目的大致意思是 超市賣東西,然後統計那些商品相同的組合。例如 abcd 與 bacd 是不同商品的組合,可以歸於同乙個類別 要求統計出,出現次數多於一次的商品組合類別,有助於幫助...

筆試 浪潮集團2020秋招研發卷

第1題 更新遞增1子串行的長度 num 1 cout n maxr endl system pause 通過率為91 第2題 python版本 intput 1 raw input intput 2 map int,raw input split dict1 dict2 for i in range...

2023年騰訊秋招筆試題 2020 08 22

給定乙個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。如,輸入為10,程式應該輸出結果為2。共有兩對質數的和為10,分別為 5,5 3,7 include include include using namespace std const long lon...