寒假藍橋杯訓練一1013字典序最小的撲克序列

2021-08-15 13:47:42 字數 953 閱讀 9377

題目大意:

a a 2 2 3 3 4 4, 一共4對撲克牌。請你把它們排成一行。

要求:兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。

請填寫出所有符合要求的排列中,字典序最小的那個。

例如:22aa3344 比 a2a23344 字典序小。當然,它們都不是滿足要求的答案。

「a」一定不要用小寫字母a,也不要用「1」代替。字元間一定不要留空格。

字串的問題,生成這些字母的全排列,然後從中挑選出滿足條件的排列

主要知識點還是 string的find函式,還有next_permutation()

下面附上**

#include#include#includeusing namespace std;

int main()

{ string s="223344aa";

do {

unsigned iab=s.find("a",0);

unsigned iae=s.find("a",iab+1);

unsigned i2b=s.find("2",0);

unsigned i2e=s.find("2",i2b+1);

unsigned i3b=s.find("3",0);

unsigned i3e=s.find("3",i3b+1);

unsigned i4b=s.find("4",0);

unsigned i4e=s.find("4",i4b+1);

if(iae-iab==2&&i2e-i2b==3&&i3e-i3b==4&&i4e-i4b==5)

cout《備註:find函式

size_type find(const char ch, size_type pos = 0) const

從字串的pos位置開始,查詢字元ch。如果找到,則返回該子字串首次出現的位置;否則,返回string::npos

1255 字典序最小的子串行

1255 字典序最小的子串行 天津大學oj 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 給出乙個由a z組成的字串s,求他的乙個子串行,滿足如下條件 1 包含字串中所有出現過的字元各1個。2 是所有滿足條件1的串中,字典序最小的。例如 babbdcc,出現過的...

排列的演算法(一) 字典序演算法

從n個不同元素中取出n個元素的排列,稱為n個不同元素的全排列。可以證明,n個元素的全排列的總數是n!全排列的生成演算法就是對於給定的元素集合,用有效的方法將所有可能的全排列無重複無遺漏地列舉出來。n個不同元素的排列都可以與n個自然數1 2 n的排列一一對應,所以,這裡就以n個數字的排列為例說明排列的...

51Nod 1255 字典序最小的子串行

acm模版 這道題大致思路不難,但是細節問題頗多,用兩種方法解題。第一種,遍歷原串,如果答案串中沒有則往答案串中插入,如果答案串中第i個等於它,並且該字母往後查有第j個比他小,並且保證i和j之間的字母在原串中依然存在 保證可以被替換掉 則刪除第i個,後續向前遷移1,並在結尾處插入該字母。第二種是利用...