題目背景
在雙人對決的競技性比賽,如桌球、羽毛球、西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。
本題中介紹的瑞士輪賽制,因最早使用於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。
第二行是2n 個非負整數s1, s2, …, s2n,每兩個數之間用乙個空格隔開,其中 si 表示編號為i 的選手的初始分數。 第三行是2n 個正整數w1 , w2 , …, w2n,每兩個數之間用乙個空格隔開,其中 wi 表示編號為i 的選手的實力值。
輸出格式:
輸出只有一行,包含乙個整數,即r 輪比賽結束後,排名第 q 的選手的編號。
輸入輸出樣例
輸入樣例#1:
2 4 2
7 6 6 7
10 5 20 15
輸出樣例#1:
說明【樣例解釋】
【資料範圍】
對於30% 的資料,1 ≤ n ≤ 100;
對於50% 的資料,1 ≤ n ≤ 10,000 ;
對於100%的資料,1 ≤ n ≤ 100,000,1 ≤ r ≤ 50,1 ≤ q ≤ 2n,0 ≤ s1, s2, …, s2n≤10^8,1 ≤w1, w2 , …, w2n≤ 10^8。
————————————————
思路:暴力搜尋 + 歸併
每次兩兩比較,分組放置,之前已經有序,歸併後,比較開頭
#include
#include
using
namespace std;
int i,j,n,r,q;
int w[
200001
],size;
struct cp
a[200001
],x[
100001
],y[
100001];
intcomp
(cp a, cp b)
void
merge()
//歸併
if(q > size)
if(x[p]
.s < y[q]
.s || x[p]
.s == y[q]
.s && x[p]
.p > y[q]
.p) a[s++
]= y[q++];
else a[s++
]= x[p++];
}}intmain()
for(i=
1; i<=n; i++
)scanf
("%d"
,&w[i]);
sort
(a+1
,a+n+
1,comp)
;for
(i=1
; i<=r; i++
)else
merge()
;}printf
("%d"
,a[q]
.p);
return0;
}
普及練習場之排序
題目提供者ccf noi 評測方式雲端評測標籤noip普及組2006 難度入門難度 時空限制1000ms 128mb 提交 題解 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了nn個11到10001000之間的隨機整數 n 100 n 100 對於其中重複的數字,只...
普及練習場之排序
p1177 模板 快速排序 總 看題目,模板啊!var n,i longint a array 1.100001 of longint procedure qsort l,r longint var i,j,temp,key longint begin if l r then exit i l j ...
普及練習場之交叉模擬
前言 不要被標題所迷惑!也不要被我的話所迷惑!p1023 稅收與補貼問題 稅收與補貼問題題解 p1031 均分紙牌 總 這個 真的是模擬了。var n,i,s,ans longint a array 1.10001 of longint begin readln n s 0 for i 1 to n...