字典序最小問題(貪心)

2022-05-06 15:42:12 字數 1047 閱讀 1891

題目大意:輸入n,代表有乙個長度為n的字串。 起初,t是乙個空串,隨後反覆進行下列任意操作:

從s 的頭部刪除乙個字元,加入到t的尾部『

從s的尾部刪除乙個字元,加入到t的尾部

目的是構造字典序盡可能小的字串t

限制條件: 1<=n<=2000,每個字串只包含大寫字母

思路:這題主要要知道當前後一樣時該選哪個,因為要字典序最小,所以應該更快的 選到小的字母,所以當兩個字母一樣時還要比較更裡面的字元····一直下去

看**

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long

ll;using

namespace

std;

const ll mod=1e9+7

;const

int maxn=2e3+10

;const

int maxk=1e4+10

;const

int maxx=1e4+10

;const ll maxe=1000+10

;#define inf 0x3f3f3f3f3f3f

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

intn;

char

a[maxn];

void

solve()

else

if(a[l+i]>a[r-i])

}if(flag) coutl++,已經不從兩端開始了

else cout<];

sum++;

if(sum==80

)

}cout

<}int

main()

貪心 字典序最小問題

貪心 字典序最小問題 題目大意 給你乙個長為n的字串s,並提供下列2種操作 讓你構造出字典序最小的字串t 思路 因為每次我們能直接考慮的只有s的首尾字母,所以每次新增到t中的不是第乙個就是最後那乙個,沒有別的方法,並且都是新增到t的末尾 根據字典序的定義,越靠前的字母越小,則字典序越小,所以我們每次...

字典序最小問題 貪心

輸入 n 6s acdbcb 輸出 abcbcd 不斷取s的開頭和末尾中較小的乙個字元放到t的末尾 1.按照字典序比較s和將s反轉後的字串 s 2.如果s較小,就從s的開頭取出乙個文字,追加到t的末尾.3.如果s較小,就從s的末尾取出乙個文字,追加到t的末尾.1 const int max n 10...

字典序最小問題

給定長度為n的字串s,要構造乙個長度為n的字串t。起初,t 是乙個空串,隨後反覆進行下列 任意 操作。1 從 s 的頭部 刪除乙個 字元,加到 t的 尾部 2 從 s 的尾部 刪除乙個 字元,加到 t 的 尾部 你的 目標是 要構造字典序盡可能小的字串 t。s 只包含大寫英文本母 輸入10 asdf...