簡單數學 末日的傳說

2021-10-03 12:43:41 字數 1771 閱讀 8550

題目

只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說:三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。

在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期:他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命,它自動地開始計數,就像排列不斷地增加。

我們用1-n來表示日曆的元素,第一天日曆就是

1, 2, 3, … n

第二天,日曆自動變為

1, 2, 3, … n, n-1

……每次它都生成乙個以前未出現過的「最小」的排列——把它轉為n+1進製後數的數值最小。

日子一天一天地過著。有一天,一位預言者出現了——他預言道,當這個日曆到達某個上帝安排的時刻,這個世界就會崩潰……他還預言到,假如某乙個日期的逆序達到乙個值m的時候,世界末日就要降臨。

什麼是逆序?日曆中的兩個不同符號,假如排在前面的那個比排在後面的那個更大,就是乙個逆序,乙個日期的逆序總數達到m後,末日就要降臨,人們都期待乙個賢者,能夠預見那一天,到底將在什麼時候到來?

只包含一行兩個正整數,分別為n和m。

輸出一行,為世界末日的日期,每個數字之間用乙個空格隔開。

輸入 #1 複製

5 4輸出 #1 複製

1 3 5 4 2

對於10%的資料有n <= 10。

對於40%的資料有n <= 1000。

對於100%的資料有 n <= 50000。

所有資料均有解。

前天才做過道逆序排序的,看這個題立馬做,結果全錯,問題完全不一樣,,,,,,,,,,呃呃呃

然後重新看了題,嗯,不會。。。。。。。難受

題目:要求當逆序達到乙個值m的時候,世界末日就要降臨。(瑟瑟發抖)。

什麼是逆序:排在前面的那個比排在後面的那個更大,就是乙個逆序。

這個題,需要乙個乙個數看,比如: 開始是 1,2,3,4,5,(樣例)

那麼當排成 5,4,3,2,1 逆序最多,有 (4+1)*4 /2 個,*用到公式(n-1)n /2

(這裡很好理解吧)

1…題目 要求出最小的那麼排序。。

先看第乙個數,1,如果 1在排在最後,那麼最多就有 (4+1)* 4 /2 個逆序,這時候我們先放在一邊,

看第二個數,2,(這時有數,2,3,4,5) 如果 2在最後,最多就有 (3+1)*3 /2 ==6個,6個大於

要求到達逆序數m=4(樣例), 這樣的情況就是說 不管你 1放在前面還是後面,我不需要1也能排出

逆序數m=4 的序列, 那麼好極了,我們把1放在前面,(因為題目要排序最小)。。。

後面的推論都是一樣,看當前數 的後乙個數 ,它的最大逆序數是否大於m,如果大於,就放在前面,

2…如果小於呢?如果小於,那就把數放在最後面,然後看有多少個逆序對,m減掉。(只看前面數對這一位數)

(比如2放在最後面,這時1放在最前, 在2前面比他大的有3,4,5,三個,那麼逆序數為3,)

3… 我們開個陣列來存放,前面都放陣列前面,後面放陣列後面,最後順序輸出陣列就好了。

是不是太囉嗦了,,,,,,,還不是為了寫清楚,(又囉嗦了哈。。。。。)

#includeusing namespace std;

long long n,m;

int a[50005];

int main()else

} for(int i=1;i<=n-1;i++)

cout

}

末日的傳說

看了半天單純的全排列和逆序對,發現 和這個題沒什麼關係。實在不會做 大致思路 乙個長度為n的排列最多有 n 1 n 2個逆序對。把越小的元素放在越前面,肯定逆序對就少了 貪心 若題目中給的m n 2 n 1 2,那就可以把最小的元素放在最前面。若m n 2 n 1 2,就要盡可能把最小的元素往後放。...

Acdream Xor 簡單數學

給定乙個集合a,乙個集合b,a,b元素個數相等,然後問是否存在乙個數x使得a中的元素均與這個數進行按位異或操作後的結果為b集合,如果存在輸出最小的數,不存在輸出 1。思路 由於給定的n為奇數,所以能夠根據二進位制位的最右邊位確定唯一的分組,然後只需要判定這個分組是否合理即可。分組是這樣劃分的,如有a...

簡單數學函式

簡單數學函式 1 題目描述 已知函式f x x2 2 2x根據輸入的x值計算f x 運算結果不超過int範圍,x 0 輸入輸入多組測試資料,每組一行為x值 輸出每個測試輸出資料一行 x int input 輸入x if x 0 y x 2 2 2 x print y 題目描述 已知函式,輸入a b的...