題目大意:給定長度為n的字串s,要構造乙個長度為n的字串t。起初,t是乙個空串,隨後反覆進行下列任意操作。
從s的頭部刪除乙個字元,加到t的尾部
從s的尾部刪除乙個字元,加到t的尾部
目標是構造字典序盡可能小的字串。
輸入:6
acdbcb
輸出abcbcd
解題思路:
這道題我們很容易想到,不斷取開頭或者結尾最小的乙個字母放到t中就可以了。這個思路是正確的,不過我們要針對開頭和結尾相同的情況來進行一下判斷,便得到如下演算法:
1.按照字典序比較s和將s反轉後的字串
2.如果s較小,就從s的開頭取出乙個字元
3.如果s』較小,就從s的末尾取出乙個字元
ac**:
#include
#include
#include
using namespace std;
const
int n =
1e5+10;
char s[n+1]
;int n;
void
solve()
else
if(s[a+i]
>s[b-i])}
if(left)
putchar
(s[a++])
;else
putchar
(s[b--])
;}putchar
('\n');
}int
main()
所以說,字典序比較類的問題,經常能用的到貪心演算法。 poj3617字典序最小問題 貪心
題目大意 給定長度為n的字串s,要構造乙個長度為n的字串t。構造方法為 從s頭部刪除乙個字元,加到t的尾部 從s尾部刪除乙個字元,加到t的尾部 解題思路 是一道貪心的水題,但也有值得學習的地方。程式設計技巧上,使用的方法比較獨特,每次都要搜尋一次,時間複雜度會高一點,但這道題怎麼寫肯定都不會超時,所...
poj 3617字典序最小 貪心
思路 定義乙個標記位left 表示是否輸出的左邊的字元 逐個比較首尾 0與n比 1與n 1比較 2與n 2比較.每當滿足比較條件 即兩個字元不相同,一大一小 就給標記位標記上,最後根據標記位的值進行輸出,切記每行滿80字元要換行 pe所在 ac include include include inc...
貪心專練2 最小字典序排序POJ3617
題目大意 給定長度為n的字串s,要構造乙個長度為n的字串t。起初,t是乙個空串,隨後反覆進行下列任意操作。從s的頭部刪除乙個字元,加到t的尾部 從s的尾部刪除乙個字元,加到t的尾部 目標是構造字典序盡可能小的字串。input 6 acdbcb output abcbcd 思路 最優規則 1.不斷比較...