題目暴力全排列是肯定不行的。
比較難想啊,關鍵抓住字典序小也就是小的數盡量往前排,找剩餘的逆序對數!
思考逆序對數需要用到數學排列組合的知識,長度為n的序列最多有n(n-1)/2個逆序對,組合數知識一算就知道。
還需要long long才過= =
1 #include 2using
namespace
std;
3 typedef long
long
ll;4
const
int maxn=1e5+5;5
ll a[maxn];
6ll n,m;78
intmain()925
}2627for(int i=1;i<=n-1;i++) cout<'';
28 cout2930
return0;
31 }
完。
洛谷P1338(末日的傳說)
只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...
洛谷P1338 末日的傳說
qaq本來不是多難的題,然鵝我折騰了半天。看到乙個挺不錯的想法 我們知道,對於乙個長度為n的序列而言,其最大的逆序對的個數為n n 1 2,題目是要求乙個逆序數為m的字典序最小的序列。那我們不妨從1開始考慮每乙個數的排列,這樣每次考慮的都是當前最小的數 如果把這個數放在最前面,而剩下的數的排列的逆序...
洛谷P1338 末日的傳說
只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...