末日的傳說

2022-05-16 02:49:54 字數 446 閱讀 8227

看了半天單純的全排列和逆序對,發現……和這個題沒什麼關係。

實在不會做

大致思路:

乙個長度為n的排列最多有(n-1)*n/2個逆序對。

把越小的元素放在越前面,肯定逆序對就少了(貪心)!

若題目中給的m<=(n-2)*(n-1)/2,那就可以把最小的元素放在最前面。

若m>(n-2)*(n-1)/2,就要盡可能把最小的元素往後放。

#includeusing

namespace

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 末日的傳說

首先審題,題目中提到 每次它都生成乙個以前未出現過的 最小 的排列。其實這句話的意思就是說,我這個日期每天都會變化,每次變化後的排列都是以前沒出現過的,也就是不會有重複的排列,然後這個日期還是除了以前出現過的排列之外的最小的排列,也就是說啊,我這個日期是按照一定規律來變化的,第一天是字典序最小,第二...