看了半天單純的全排列和逆序對,發現……和這個題沒什麼關係。
實在不會做
大致思路:
乙個長度為n的排列最多有(n-1)*n/2個逆序對。
把越小的元素放在越前面,肯定逆序對就少了(貪心)!
若題目中給的m<=(n-2)*(n-1)/2,那就可以把最小的元素放在最前面。
若m>(n-2)*(n-1)/2,就要盡可能把最小的元素往後放。
#includeusingnamespace
std;
long
long n,m,a[50005
],t,f,p;
intmain()
}for(int i=1; i<=n; i++)
printf(
"%d
",a[i]);
return0;
}
luogu P1338 末日的傳說
本質就是算逆序對數。n個降序排列的數能提供 n 1 n 2 個逆序對,這是n個數能創造出的最多逆序對數。那如何排列出任意m個逆序對呢?顯然第一步是找出能覆蓋 m 的最小 n 來,即 n 1 n 2 m。n 能覆蓋,那麼 n 1 就不能覆蓋 m,而 m 與 n 1 的覆蓋 之間的差值 dis m n ...
簡單數學 末日的傳說
題目 只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予...
P1338 末日的傳說
首先審題,題目中提到 每次它都生成乙個以前未出現過的 最小 的排列。其實這句話的意思就是說,我這個日期每天都會變化,每次變化後的排列都是以前沒出現過的,也就是不會有重複的排列,然後這個日期還是除了以前出現過的排列之外的最小的排列,也就是說啊,我這個日期是按照一定規律來變化的,第一天是字典序最小,第二...