洛谷 普及組 P1309 瑞士輪

2021-10-02 16:15:42 字數 2042 閱讀 6529

題目背景

在雙人對決的競技性比賽,如桌球、羽毛球、西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。

本題中介紹的瑞士輪賽制,因最早使用於2023年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈賽的折中,既保證了比賽的穩定性,又能使賽程不至於過長。

題目描述

2×n 名編號為 1∼2n 的選手共進行r 輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。

每輪比賽的對陣安排與該輪比賽開始前的排名有關:第1 名和第2 名、第 3 名和第 4名、……、第2k−1名和第2k名、…… 、第2n−1名和第2n名,各進行一場比賽。每場比賽勝者得1分,負者得 0分。也就是說除了首輪以外,其它輪比賽的安排均不能事先確定,而是要取決於選手在之前比賽中的表現。

現給定每個選手的初始分數及其實力值,試計算在r 輪比賽過後,排名第q 的選手編號是多少。我們假設選手的實力值兩兩不同,且每場比賽中實力值較高的總能獲勝。

輸入格式

第一行是三個正整數n,r,q,每兩個數之間用乙個空格隔開,表示有 2×n名選手、r 輪比賽,以及我們關心的名次q。

第二行是2×n 個非負整數s1​,s2​,…,

輸出格式

乙個整數,即r 輪比賽結束後,排名第q 的選手的編號。

資料範圍

對於30%的資料,1 ≤ n ≤ 100;

對於50%的資料,1 ≤ n ≤ 10000;

對於100%的資料,1 ≤ n ≤ 100000, 1 ≤ r ≤ 50, 1 ≤ q ≤ 2n, 0 ≤ s1​,s2​,…,

輸入輸出樣例輸入

2 4 2 

7 6 6 7

10 5 20 15

輸出

1
一開始採用快速排序(sort),提交後發現執行超時,然後改用歸併排序。因為快排適合無序序列,而針對有序序列歸併排序時間複雜度更低。

▶用結構體依次表示選手編號,當前得分,實力值

▶編寫cmp函式,先對選手按照初始分數從大到小排列,分數相同者編號從小到大排列

▶每輪賽後用歸併排序(merge函式)對所有選手進行排序。分成勝者組和敗者組,此時兩個陣列一定都按照分數由大到小排列,因此比較兩陣列的最大值,分數高者加進總序列,分數低者繼續和另乙個陣列的次高值比較,分數高者再加進總序列。直到兩個陣列的元素都加進總序列。

#include#includeusing namespace std;

int n, r, q;

struct infotot[200005], win[200005], los[200005]; //總序列,每輪勝者序列,每輪敗者序列

bool cmp(info a, info b)

void merge()

else

} pw = 1, pl = 1, pt = 1;

while(pw <= n && pl <= n)

while(pw <= n) tot[pt++] = win[pw++]; //若敗者組已全部加進序列,勝者組有剩則依次加進總序列

while(pl <= n) tot[pt++] = los[pl++]; //若勝者組已全部加進序列,敗者組依次進總序列

}int main()

for(int i = 1; i <= n*2; i++) cin >> tot[i].w;

sort(tot+1, tot+1+n*2, cmp);

for(int i = 1; i <= r; i++) merge();

cout << tot[q].num << endl;

return 0;

}

洛谷P1309 瑞士輪

本題同樣是noip普及組第三題。因為太久沒有做過題目了,先從普及組開始練習吧。題目內容 很顯然想到的思路就是模擬,如下 include include include include using namespace std struct player bool cmp player a,player...

洛谷p1309 瑞士輪

因為太菜不會寫p1310 表示式的值,就只能過來水兩篇部落格啦qwq 另外這個題我是開o2才過的 雖然是寫了歸併排序 可能我太菜寫的歸併不是還可以 剪枝 吧qwq 哎,果真還是太菜啦qwq 所以準備寫歸併然後去題解學習正確的不用開o2就可以過的演算法 瑞士輪 題目鏈結 其實這個題打眼一看可以直接so...

洛谷 P1309 瑞士輪

在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於1895年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈賽的折中...