搜狗2020校招(後端)筆試第一場

2021-10-23 14:16:47 字數 2736 閱讀 7696

寫了兩道題

第一題關聯容器map儲存資料,能通過key快速儲存或查詢記錄。請設計乙個map,能夠滿足以下要求:

1. map的容量size是乙個固定值n,即map最多儲存n個記錄;

2. map insert乙個前,首先判斷這個key是否已經在map中存在:

1) 如果存在:記這個已存在的記錄為,若old_value2) 如果不存在:

若size,且size+=1;

若size==n,先淘汰掉乙個更新時間最早的記錄,再執行map的insert,儲存這個,size保持為n不變。

說明:記錄的更新時間預設為其被insert進map的時間,之後的某一時刻t,如果這個記錄的value被更新,那麼,該記錄的更新時間就變為t。

輸入描述:

第一行是map的最大size n(n<=200000),之後每一行都為"key value",其中key為乙個字串(長度<16),value為無符號整數(unsigned int),key和value之間用空格分隔。

輸出描述:

輸出為map insert的過程中被淘汰掉的記錄(不輸出value被更新的記錄),每行為"key value", 和輸入檔案的"key value"格式相同。
示例1

2

10_123_50_a0 1566918054

10_123_50_a1 1566918054

10_123_50_a1 1566918055

10_123_50_a3 1566918055

10_123_50_a4 1566918056

10_123_50_a0 1566918054

10_123_50_a1 1566918055

題解:lru快取機制,直接用unordered_map + list即可

#include using namespace std;

struct kvnode

};class map

public:

map(int _n) : n(_n) {}

void insert(string key, unsigned int val, tuple& res)

res = make_tuple(false, "", 1);

} else else

}}};

int main()

} return 0;

}

第二題不會

第三題:

【題幹描述】:

我們共有n臺伺服器,每台伺服器可以和若干個子伺服器傳輸資料,n臺伺服器組成乙個樹狀結構。

現在要將乙份資料從root節點開始分發給所有伺服器。

一次資料傳輸需要乙個小時時間,

乙個節點可以同時對k個兒子節點進行並行傳輸,

不同節點可以並行分發。

問,全部分發完成,最短需要多少小時?

【示例】:

當共有5臺伺服器,其樹狀結構為

1      2

3    4

假設每一台伺服器同時可以對1個兒子節點(k=1)並行傳輸,最優的資料傳輸過程示例如下:

第乙個小時,0 -> 1;

第二個小時,1->3 & 0->2;

第三個小時,1 -> 4;

所以當k=1時,全部分發完成最短需要3個小時。

假設每一台伺服器同時可以對2個兒子節點(k=2)並行傳輸,最優的資料傳輸過程示例如下:

第乙個小時,0 -> 1 & 0 -> 2;

第二個小時,1 -> 3 & 1 -> 4;

所以當k=2時,全部分發完成最短需要2個小時。

輸入描述:

首行輸入包含兩個引數,分別表示每台伺服器允許k個子節點並行傳輸,以及剩餘輸入行數。

其他行用於伺服器樹狀結構描述,每一行表示乙個父節點以及父節點對應的所有子節點。每一行都通過空格符分割不同數字,第一位數字為父節點及其所有子節點個數,第二位數字為父節點編號,其他數字為對應的子節點編號。

輸出描述:

輸出全部伺服器分發完成,需要的最短時間。
示例1

1 2

3 0 1 2

2 1 3

2
題解:貪心+dfs,父節點每次分發的時候先分發給那些分發完所需時間最長的子節點分發。

#include using namespace std;

const int n = 1000005;

vectortree[n];

int indegree[n];

int dfs(int u, int k)

vectorfoo;

for (int v : tree[u])

sort(foo.begin(), foo.end(), [&](int x, int y) );

int res = 0;

for (int i = 0; i < (int)foo.size(); i++)

return res;

}int main()

} int root = 0;

for (int i = 0; i <= sz; i++)

} cout << dfs(root, k) << endl;

return 0;

}

2020多校第一場1005

利用斐波拉契數列的通項公式。先利用二次剩餘和逆元得出三個常數。將式子多項式展開,發現等比數列的規律。遍歷k,等比求和,用逆元求組合數。include include include using namespace std typedef long long ll const int n 100005...

indeed秋招筆試第一場

做了indeed秋招的第一場筆試,題目相比別家確實簡單。其中前三道完全是水題,記錄一下 第一題 tabereru 題意 給定乙個字串,遇到 ra 需要刪除,但是刪除之後如果又出現了 ra 那麼不繼續刪除了。即如果輸入是rrraaa,那麼輸出是rraa。思路 字串很短,隨便搞就ok。第二題 matri...

2020 牛客多校第一場

a b suffix array f infinite string comparision jzk開場提出了兩倍最大的長度,然後 dh 說直接比較a b和b a即可,由於是訓練賽,不想寫太長的 然後交了一發直接比較的 就過了 includeusing namespace std string s1...