FZU 2184) 逆序數還原

2021-06-29 07:01:21 字數 916 閱讀 5442

problem 2184 逆序數還原

有一段時間eric對逆序數充滿了興趣,於是他開始求解許多數列的逆序數(對於由1...n構成的一種排列陣列a,逆序數即為滿足iaj的數字對數),但是某天他發現自己遺失了原來的數列,只留下之前計算過程中留下的各個數字對應的逆序數,現在請你幫他還原出原序列。

資料有多組,請處理到檔案結尾。

每組資料第一行為乙個整數n(1<=n<=1000),表示該序列的數字個數。

第二行為n個整數,第i個數字表示排在ai之後比ai小的數字個數。

輸出為一行n個整數,表示原數列。5

2 0 1 0 0

3 1 4 2 5

雖說對於很多人來說這是一道很簡單的一道題,但是我卻想了很久也沒有想出來,而且一開始我的思路都找錯了,也許是邏輯功底不好的緣故吧,說實話內心真的有點心搓。我真的很想變強大,但是比我聰明比我用功的人還有那麼多,我不知道自己該怎麼辦,再也不要考慮別人的目光,勇敢的去前行吧。

這道題看起來很複雜,但是卻是有規律的,就拿樣例來說吧,輸入的第乙個數是2,那麼就說明後面只有2個數比它小,那麼肯定就是3了,然後在原來的陣列中把3標記去掉,然後第二個是0,那麼後面都比它大,那麼肯定就是1了,第三個是1,那麼後面有1個數比現在的這個數小,那麼就取的是4,然後依此類推。

其實是有規律的,把1~n這些數存在下標從0開始的陣列中,然後每一次sort一遍,然後輸出對應於input中第乙個下標所對應的數,然後再對陣列清零,然後繼續sort。

注意每一次排除出的數要被標記為乙個正無窮或是乙個很大的數。

#include#include#include#includeusing namespace std;

int main()

else printf("%d\n",ss[a[i]]);

} }}

fzu 2184 逆序數還原(vector)

5 2 0 1 0 0 vector中初始化1 n的數字。比如上面乙個要還原的逆序數,開頭是2那麼就是求出1 n中第3小的數字,就是3,把3從vector中刪除 然後是0,就找到vector中第1小的數字,把1刪除 然後是1,找到vector中第2小的數字,把2刪除 把每次找到的數字儲存就是最終答案...

FZU 單詞問題

給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字元 不包含空格 句子長度不超過 10...

fzu 單詞問題

description 給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。input 輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字...