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