在雙人對決的競技性比賽,如桌球、羽毛球、西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。
本題中介紹的瑞士輪賽制,因最早使用於2023年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈賽的折中,既保證了比賽的穩定性,又能使賽程不至於過長。
2×n 名編號為 \(1\sim 2n\) 的選手共進行r 輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。
每輪比賽的對陣安排與該輪比賽開始前的排名有關:第1 名和第2 名、第 3 名和第 4名、……、第2k−1名和第2k 名、…… 、第2n−1名和第2n名,各進行一場比賽。每場比賽勝者得1分,負者得 0分。也就是說除了首輪以外,其它輪比賽的安排均不能事先確定,而是要取決於選手在之前比賽中的表現。
現給定每個選手的初始分數及其實力值,試計算在r 輪比賽過後,排名第q的選手編號是多少。我們假設選手的實力值兩兩不同,且每場比賽中實力值較高的總能獲勝。
第一行是三個正整數n,r,q,每兩個數之間用乙個空格隔開,表示有 \(2 \times n\)名選手、r 輪比賽,以及我們關心的名次 q。
第二行是\(2 \times n\) 個非負整數\(s_1, s_2, …, s_\),每兩個數之間用乙個空格隔開,其中\(s_i\)表示編號為i 的選手的初始分數。 第三行是\(2 \times\)個正整數\(w_1 , w_2 , …, w_\),每兩個數之間用乙個空格隔開,其中 \(w_i\) 表示編號為i 的選手的實力值。
乙個整數,即r 輪比賽結束後,排名第q 的選手的編號。
輸入 #1
2 4 2
7 6 6 7
10 5 20 15
輸出 #11
【樣例解釋】
【資料範圍】
對於30%的資料,1≤n≤100;
對於50%的資料,1≤n≤10,000;
對於100%的資料,\(1 ≤ n ≤ 100,000,1 ≤ r ≤ 50,1 ≤ q ≤ 2n,0 ≤ s_1, s_2, …, s_≤10^8,1 ≤w_1, w_2 , …, w_≤ 10^8\)。
noip2011普及組第3題。
#include #include using namespace std;
struct node player[200000],winner[100000],loser[100000];
bool cmp(node x, node y)
for(i=0;i<2*n;++i)
cin>>player[i].w;
sort(player,player+2*n,cmp);
for(i=0;iplayer[2*j+1].w)
else
merge(winner,winner+n,loser,loser+n,player,cmp);
}cout<
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 瑞士輪
題意 有很多選手,選手一開始有編號,初始積分和能力值,編號按輸入順序決定,輸入完成後按積分排名,積分相同編號小的在前 規定比r輪比賽,每輪比賽第一名與倒數第一比,第二名與倒數第二比,依次類推。能力值大的贏,贏的加一分,輸的不加,每次比完一輪都要動態重新整理排名。一開始,每次比完一輪我都會重新排個序,...