AcWing 113 特殊排序

2021-09-10 18:53:19 字數 1050 閱讀 5615

題目描述:

有n個元素,編號1.2..n,每一對元素之間的大小關係是確定的,關係不具有傳遞性。也就是說,元素的大小關係是n個點與n*(n-1)/2條有向邊構成的任意有向圖。然而,這是一道互動式試題,這些關係不能一次性得知,你必須通過不超過10000次提問來獲取資訊,每次提問只能了解某兩個元素之間的關係。

現在請你把這n個元素排成一行,使得每個元素都小於右邊與它相鄰的元素。你可以通過我們預設的bool函式compare來獲得兩個元素之間的大小關係。例如,編號為a和b的兩個元素,如果元素a小於元素b,則compare(a,b)返回true,否則返回false。將n個元素排好序後,把他們的編號以陣列的形式輸出,如果答案不唯一,則輸出任意乙個均可。

資料範圍

1≤n≤1000

輸入樣例

[[0, 1, 0], [0, 0, 0], [1, 1, 0]]
輸出樣例

[3, 1, 2]
注意:不存在兩個元素大小相等的情況。

分析:本題與一般排序有三個區別,其一是互動式,你並不知道大小關係,只能通過呼叫compare介面詢問;其二是大小不具備傳遞性,比如a < b,b < c並不能推出a < c;其三是不能超過一萬次詢問,資料範圍為1000,nlogn略小於一萬,而cba演算法在最壞情況下的下界也就是nlogn。

對於其第二個性質僅僅導致答案不唯一,題目僅要求輸出一種答案,所以可以忽視該條件。採用二分插入排序解決該問題,首先將第乙個元素壓入向量裡,然後二分查詢合適的位置r,將待插入元素插入到向量末尾,從後往前不斷交換相鄰的兩個數直到待插入的元素到達指定位置。注意該二分演算法的寫法,迴圈退出時l比r大一,意味著r位置的必然小於待插入的元素,r+1及其之後的元素都大於待插入的元素。

class solution 

res.push_back(i);

for(int j = res.size() - 2;j > r;j--) swap(res[j],res[j + 1]);

}return res;

}};

AcWing 113 特殊排序(互動題)

有 n 個元素,編號 1,2.n,每一對元素之間的大小關係是確定的,關係具有反對稱性,但不具有傳遞性。注意 不存在兩個元素大小相等的情況。也就是說,元素的大小關係是 n 個點與 n n 1 2 條有向邊構成的任意有向圖。然而,這是一道互動式試題,這些關係不能一次性得知,你必須通過不超過 10000 ...

C 實驗11 3 結構排序

題目描述 有n名學生,每個學生的屬性包括姓名與總成績。已知學生的姓名與總成績,你的任務是將學生的資訊按照以下方式排序 首先比較總成績,總成績高的在前面,總成績低的在後面,當總成績相同時,你要比較學生的姓名,姓名字典序小的同學在前面,姓名字典序大的同學在後面 ascii碼順序 n的範圍是1 100 學...

1925 特殊排序

時間限制 1 sec 記憶體限制 32 mb 提交 536 解決 191 提交 狀態 討論版 命題人 外部匯入 輸入一系列整數,將其中最大的數挑出,並將剩下的數進行排序。輸入第一行包括1個整數n,1 n 1000,代表輸入資料的個數。接下來的一行有n個整數。可能有多組測試資料,對於每組資料,第一行輸...