洛谷 P1628 合併序列

2022-03-20 05:54:21 字數 859 閱讀 4005

題目傳送門

有n個單詞和字串t,按字典序輸出以字串t為字首的所有單詞。

輸入檔案第一行包含乙個正整數n;

接下來n行,每行乙個單詞,長度不超過100;

最後一行包含字串t。

【資料規模】

對於60%的資料,滿足1≤n≤1000;

對於100%的資料,滿足1≤n≤100000且所有字元均為小寫字母;

按字典序公升序輸出答案。

輸入 #1複製

輸出 #1複製

這道題有多種方法:

字典樹(trie樹)、排序、二叉堆...

正解應該是字典樹(來自教練和大佬的指點)可惜我不會。

所以我們考慮一種樸素方法:

而且時間也可以過。

那麼,我們還可以用堆進行資料結構處理。實現原理和上面那個大同小異。因為小根堆(這裡用優先佇列實現)也可以維護乙個字串的字典序。

比較一下這兩種做法:

排序的時間複雜度比較高,但是碼量少,容易想。二叉堆的常數大,如果不開o2的話奇慢無比容易被卡,但大多數時候要更優秀一些。而且可以用於裝b。

**:

#include#include#include#include#includeusing namespace std;

const int maxn=1e5+1;

int n;

string s[maxn],k;

priority_queue,greater>q;

int main()

cin>>k;

for(int i=1;i<=n;i++)

return 0;

}

洛谷P1628合併序列 模板 Trie dfs

很久之前寫的題了,當時不知道怎麼dfs所以卡了一段時間,題解 由於題目給了一大堆字串,所以首先考慮應該可以建樹,之後找到t所在的位置,對t所在的位置dfs就行了 1 include 2 include 3 include 4 include 5 include 6 include 7 include...

洛谷 P1631 序列合併

題目描述 有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。輸入輸出格式 輸入格式 第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.資料規模 對於50 的資料中,滿...

洛谷 P1631 序列合併

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間...