洛谷 P1088 火星人(亂搞)

2021-09-25 20:08:44 字數 638 閱讀 4045

題目大意:

已知有一串數字,問在原來的數字串的字典序加m後,應該輸出多少

解題思路:

最簡便的做法是用next_permutation,這個生成的全排列可以按照字典序遞增,這裡我用的是搜尋的方法。首先我從後往前搜,一直記錄最大值,假如遇到比最大值小的數記為a[j],停止搜尋,當前,證明我們可以進行一次交換從而達到加一的效果,那麼要找哪個數來完成加一呢?我們再進行同樣的搜尋過程,記錄下比a[j]大的數字裡面最小的那乙個,記為a[i]。最後完成交換,最後,a[j]之前搜尋的數字要從大到小排。

廢話:哎,這種xjb搜尋錯估了複雜度,其實最後的複雜度只是o(m*n*logn),同時最後的從大到小排也沒想過。

#include #define inf 0x3f3f3f3f

using namespace std;

int main()

reverse(arrmv.begin(),arrmv.end());

for(int i=0;iarrmv[j])

reverse(arrmv.begin(),arrmv.end());

for(int i=0;i<(int)arrmv.size();i++)

cout

}

洛谷 P1088 火星人

題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...

洛谷 P1088 火星人

題目描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答...

洛谷P1088火星人

傳送門 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。...