期末 考題2

2021-09-12 18:31:08 字數 1630 閱讀 7998

給定乙個滿二叉樹,即這棵二叉樹有n=2m(0≤m≤18)

個葉子,每個葉子上有乙個數字,且從左往右看去,這些數字序列是乙個1到n

的排列。

二叉樹每個非葉節點都能任意次數地交換左右孩子,且交換沒有先後順序的要求。交換完以後,從左往右看去,葉子組成的數字序列(仍是1到n

的排列)的逆序對可能發生了改變哦~

現在你要求出一種最佳的交換方案,使得葉子組成的數字序列的逆序對數目盡量小。

輸入的第一行包含乙個正整數n

,這個正整數必為2的冪次。

接下來1行包含n

個整數,乙個1到n

的排列,依次表示初始狀態下,從左到右看到的葉子上的數字序列。

輸出1行1個整數,即最小的逆序對個數。

8

3 1 6 2 8 7 4 5

3
這個二叉樹一開始是這樣的

a

/ \

/ \

b c

/ \ / \

d e f g

/ \ / \ / \ / \

3 1 6 2 8 7 4 5

經過一系列非葉節點的左右孩子交換:

swap(left(c), right(c))

swap(left(e), right(e))

swap(left(d), right(d))

swap(left(f), right(f))

得到最優的方案:

a

/ \

/ \

b c

/ \ / \

d e g f

/ \ / \ / \ / \

1 3 2 6 4 5 7 8

其葉子組成的數字串行為

1 3 2 6 4 5 7 8
逆序對個數為3。可以驗證這個方案是最優的。

請檢視下發檔案

內的sample2_input.txt和sample2_output.txt。

其中20%的資料,m≤10

另外40%的資料,m≤18

剩下20%的資料,m≤20

空間:256 mb

注意,使用python的同學,oj給你們提供了pypy來提速,源**根本不用變,只需在第一行修改一下即可享受高速python。

使用pypy必須得在第一行加上(或者直接使用我給你們的io模板)

python 2:

#!/usr/bin/env pypy
python 3:

#!/usr/bin/env pypy3
為了幫助大家完成題目,我們提供了只包含了輸入輸出功能的程式模板。

你可以根據自己的實際情況,在這些程式的基礎上進行作答,或不參考這些程式,這將與你的得分無關。

這些程式可以從【這裡

期末考啊期末考

好久沒有沒有發表 j2me android的文章了,最近在忙著考試,雖然大學考試不是很重要,但是我覺得還是應該重視,畢竟平時確實沒有怎麼學.考試又不想zuob,我覺得這是對自己的不負責,考試但求無愧於心.不過考了5科,半個月,突然發現這次考試最大的樂趣是看別人zuob,學校不抓zuob,老師也就放得...

編譯原理期末考點

題型 單選5個 10分 填空10個 20分 簡答2個 10分 解答9個 60分 最後3題,每個10分 目錄 第一章第二章 第三章 第四章第五章 第六章什麼是編譯程式 把某一種高階語言程式等價的轉換成另一種低階語言的程式 翻譯程式有哪兩種 編譯和解釋程式 編譯的6個過程,自己的作用 任務 中間 逆波蘭...

想想想 期末考之前

高二就要過去了啊 經歷了好多東西 apio 鹽酸什麼什麼片 甲流 還有些想不起來的東西 明天就是期末考試了 比別的學校都要早呢。然後就步入了高三。彷彿高二沒弄出什麼成就就過去了啊 放假可以在家四天,計畫做三十多套題,要完成啊seve。期末考 前兩次不知道怎麼人品爆發了,竟然都是前一百,可是班裡都考得...