2019 計蒜之道 複賽 D 「星雲系統」

2021-09-24 16:13:10 字數 900 閱讀 4159

全世界的中心傳輸節點和各地的網路節點組成的這個「星雲系統」,何其複雜。我們現在只考慮一條支線上的網路節點,每乙個網路節點比作乙個字元的話,這條支線就是乙個字串。

現在給定你乙個字串 ss 以及乙個整數 kk,請求出 ss 的字典序最小的長度為 kk 的子串行。

第一行乙個由小寫英文本母構成的字串 ss,第二行乙個正整數 kk。

一行乙個字串ans,表示答案。

0樣例輸入

helloworld

5

樣例輸出

ellld
解法有點貪心的思想,每次選出「可取區間」內的最小字元,選k次就好了。假設字串為"helloworld", k =  5,為了保證選取的子串行長度為5,那麼第一次可取的區間[0,5],也就是說即使在極端情況下選了index=5這個位置上的字元,這樣也能保證取滿5個字元,接下來的事情就是重複上一步的步驟了, 每取完第i個字元後,剩下的字元應該至少在當前選中位置pos的下一位開始找。容易得到「可取區間」上邊界為pos + 1, 下邊界為∣s∣ - (k - (i + 1))。

事實上即使這樣還是超時,學弟考慮了測試資料的一種極端情況:全由『a』組成的長字串,於是就有了第16行的優化。

#include#include#includeusing namespace std;

const int maxn = 5e6 + 10;

char out[maxn], str[maxn];

int main() else }}

l = pos + 1, r = len - (k - (i + 1));

out[i] = min_ch;

} printf("%s", out);

return 0;

}

2019 計蒜之道 複賽 D 「星雲系統」

現在給定你乙個字串s以及乙個整數k,請求出s的字典序最小的長度為k的子串行。題目鏈結 第一行乙個由小寫英文本母構成的字串s,第二行乙個正整數k。一行乙個字串ans,表示答案。0helloworld 5ellld 設串長為n,則只需刪掉n k個字元。用乙個單調棧維護,依次將字串的每個字元插入,如果當前...

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...

計蒜之道複賽 B D F

b題是乙個簡單的模擬 求一下兩個點中間每過deta的整數點 然後更新一下每個點的最後一次經過就好了 1 include2 define cl a,b memset a,b,sizeof a 3 define debug x cerr x x 4 using namespace std 56 cons...