CSL的字串(牛客 上海高校程式設計競賽)

2021-09-14 06:15:00 字數 1205 閱讀 8389

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 524288k,其他語言1048576k

題目描述 :

csl 以前不會字串演算法,經過一年的訓練,他還是不會……於是他打算向你求助。

給定乙個字串,只含有可列印字元,通過刪除若干字元得到新字串,新字串必須滿足兩個條件: 原字串**現的字元,新字串也必須包含。

新字串中所有的字元均不相同。 新字串的字典序是滿足上面兩個條件的最小的字串。

輸入描述 :

僅一行,有乙個只含有可列印字元的字串 s。

|s|<1e5

輸出描述 :

在一行輸出字典序最小的新字串。

示例1輸入

bab輸出

ab示例2

輸入baca

輸出bac

備註: ascii字符集包含 94 個可列印字元(0x21 - 0x7e),不包含空格。

思路:比賽的時候一直在想,對於乙個重複出現的,找到後面第乙個比他小的,如果中間有比他大的,就把他刪掉,然後保留最後乙個。如果它後面有唯一乙個出現並且比他大的,就保留它。

保留最後乙個不對鴨,應該是保留後面比他大並且唯一的那個,或者是他已經是最後乙個了。

比如說 tzetfze,對於第乙個t,把他後面的z刪掉了,它本身也要刪掉。

正確的思路:

還是往前找容易,對於乙個字元,找他前面所有的,如果前面的有比他大並且不是單一出現,就讓它出隊,取消標記。如果前邊都比他小就暫時留下這個並且標記一下,標記後的字元不在入隊。

**:

#include #include #include #include #include #include #include #include #include#include using namespace std;

#define ll long long

#define eps 0.001

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define memset(a,b) memset(a,b,sizeof(a))

const int max=1e5+10;

deque dq;

int vis[max];

int main()

cout

}

上海高校程式設計聯賽 D CSL的字串 棧模擬

ascii碼表示的字元轉換成整數實測不超過200 具體多少懶得查了 分析 要求總的字典序最小,那就讓最小的字元盡可能放在前面,除非最小的字元前面比它大的字元存在只有乙個的情況,這種情況刪掉就不滿足包含原串所有字元的要求了,就不能刪,其他的後面還有的字元就可以隨便刪,由此我們用棧來實現這個操作。先用b...

CSL的字串(棧)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld csl 以前不會字串演算法,經過一年的訓練,他還是不會 於是他打算向你求助。給定乙個字串,只含有可列印字元,通過刪除若干字元得到新字串,新字串必須滿足兩個條件 僅...

牛客 倒置字串

經過函式後變為 beijing.like i 輸入描述 每個測試輸入包含1個測試用例 i like beijing.輸入用例長度不超過100 輸出描述 依次輸出倒置之後的字串,以空格分割 1.先把字串整體倒轉 反轉前 i like beijing.反轉後1 gnijied ekil i 2.把字元傳...