位元組跳動 2023年筆試題 秘密通訊

2021-10-03 00:27:32 字數 1786 閱讀 4638

小明和安琪是好朋友。最近,他們的談話被一家偵探機構監控,所以他們想將他們的談話內容進行加密處理。

於是,他們發明了一種新的加密方式。每條資訊都被編譯成二進位制數b(明文),其長度為n。

然後該資訊被寫下k次,每次向右移動0,1,…,k-1位。

例如:b = 1001010,k=4

1001010

1001010

1001010

1001010

然後對每一列進行異或操作,並且把最終所得的結果記錄下來,我們將該數稱為s(密文)。

例如上述例子的結果為:1110100110。

最後,將編碼的資訊s和k傳送給安琪。

小明已經實現了這種編碼的加密過程,但他要求安琪寫乙個程式去實現這種編碼的解密過程,你能幫助安琪實現解密過程嗎?

輸入格式:

第一行輸入兩個整數nk

第二行輸入乙個二進位制字串s,長度是n + k - 1

輸出格式:

輸出明文b

資料範圍

1<=n<=10^6

1<=k<=10^6

思路:

首先,通過給出的示例,分析壓縮的規律,從壓縮的規律中反推出解壓的演算法。

首先分析壓縮的過程:

0 = 0

1 = 1 ^ 0

1 = 0 ^ 1 ^ 0

0 = 0 ^ 1 ^ 0 ^ 1

0 = 1 ^ 0 ^ 1 ^ 0

1 = 0 ^ 1 ^ 0 ^ 0

0 = 1 ^ 0 ^ 0 ^ 1

1 = 0 ^ 0 ^ 1

1 = 0 ^ 1

1 = 1

將要求解的明文串設定為:abcdefg

將壓縮後的密文串設定為:hijklmnopq

從新分析壓縮過程可得到如下:

q = g

p = f ^ g

o = e ^ f ^ g

n = d ^ e ^ f ^g

m = c ^ d ^ e ^ f

l = b ^ c ^ d ^ e

k = a ^ b ^ c ^ d

j = a ^ b ^ c

h = a

將公式a ^ b = c ⇒ a = b ^ c代入,可推斷出:

g = q

f = g ^ p = p ^ q

e = o ^ f ^ g = o ^ p ^ q ^ q = o ^ p

d = n ^ e ^ f ^ g = ... = n ^o

c = m ^ d ^ e ^ f = m ^ n ^ o ^ o ^ p ^ p ^ q = m ^ n ^ q

b = l ^ c ^ d ^ e = l ^ m ^ p

a = k ^ b ^ d ^ d = k ^ l ^ o

可以推斷出規律:

public

class

main

res[0]

= s1[0]

;for

(int i =

1;i < k; i++

)for

(int i = k;i < n; i++

)for

(int i =

0;i < res.length; i++)}

}

位元組跳動2019筆試題

小明國慶節來北京玩,北京有n個景點,第 i 個景點的評分用a i 表示,兩個景點i,j之間的距離為j i j i 小明一天只能遊玩兩個景點,我們認為總評分是兩個景點的評分之和減去兩個景點之間的距離,即為a i a j i j。那麼小明選擇哪兩個景點才會總評分最大呢?輸入格式 第一行包含整數n。第二行...

位元組跳動筆試題

要求 輸入陣列長度,然後輸入陣列中的各個元素,最後輸入整數k,要求找出陣列中三個元素小於k的三個元素,例如 輸入陣列長度 6 輸入陣列元素 2 0 1 2 3 6 輸出三元組 共4個 下面給出思路和 思路 1 獲得使用者輸入的陣列長度n,若n不為整數,則提示錯誤。2 建立陣列。3 獲得使用者輸入的陣...

位元組跳動歷屆筆試題(1)

有三隻球隊,每只球隊編號分別為球隊1,球隊2,球隊3,這三隻球隊一共需要進行 n 場比賽。現在已經踢完了k場比賽,每場比賽不能打平,踢贏一場比賽得一分,輸了不得分不減分。已知球隊1和球隊2的比分相差d1分,球隊2和球隊3的比分相差d2分,每場比賽可以任意選擇兩隻隊伍進行。求如果打完最後的 n k 場...