題目背景題目在雙人對決的競技性比賽,如桌球、羽毛球、西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。
本題中介紹的瑞士輪賽制,因最早使用於2023年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈賽的折衷,既保證了比賽的穩定性,又能使賽程不至於過長。
題目描述
2*n 名編號為 1~2n 的選手共進行r 輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。
每輪比賽的對陣安排與該輪比賽開始前的排名有關:第1 名和第2 名、第
3 名和第 4名、……、第2k – 1 名和第 2k名、…… 、第2n – 1 名和第2n名,各進行一場比賽。每場比賽勝者得1 分,負者得 0
分。也就是說除了首輪以外,其它輪比賽的安排均不能事先確定,而是要取決於選手在之前比賽中的表現。
現給定每個選手的初始分數及其實力值,試計算在r 輪比賽過後,排名第 q 的選手編號是多少。我們假設選手的實力值兩兩不同,且每場比賽中實力值較高的總能獲勝。
輸入輸出格式
輸入格式:
輸入檔名為swiss.in。
輸入的第一行是三個正整數n、r 、q,每兩個數之間用乙個空格隔開,表示有
2*n 名選手、r 輪比賽,以及我們關心的名次 q。
第二行是2*n 個非負整數s1, s2, …, s2n,每兩個數之間用乙個空格隔開,其中 si 表示編號為i 的選手的初始分數。 第三行是2*n 個正整數w1 , w2 , …, w2n,每兩個數之間用乙個空格隔開,其中 wi 表示編號為i 的選手的實力值。
輸出格式:
輸出檔名為swiss.
out。
輸出只有一行,包含乙個整數,即r 輪比賽結束後,排名第 q 的選手的編號。
輸入輸出樣例
輸入樣例#1:
2427
66710
52015輸出樣例#1:
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
。noip2011普及組第3題。
芒果君:首先說句題外話,那天我看到乙個dalao講倍增的部落格,風格非常智障,但是我覺得這樣寫部落格才有意思,像我之前寫的那是什麼玩意兒,自己都不想看。
進入正題,話說排序有很多種啊,可是我們一天到晚就知道用sort用快排,結果這道題就t了。天啊,歸併排序啊,你的命好苦啊!~~~~~~
然後我又學會了乙個stl叫merge,就是歸併,引數大概是這樣-->(組1頭,組1尾,組2頭,組2尾,承載組頭,comp)大家隨意感受一下,這道題應該就能解決了。
1 #include2 #include3#define l 200010
4using
namespace
std;
5int
n,r,q,i,j;
6struct
mangoa[l],a1[l],a2[l];
9bool
comp(mango x,mango y)
1014
intmain()
1523
for(i=1;i<=n;++i) scanf("
%d",&a[i].w);
24 sort(a+1,a+1+n,comp);
25for(i=1;i<=r;++i)
2635
else
3641
}42 merge(a1+1,a1+n/2+1,a2+1,a2+n/2+1,a+1
,comp);43}
44 printf("%d"
,a[q].num);
45return0;
46 }
洛谷 1309 瑞士輪
題目描述 2 n 名編號為 1 2n 的選手共進行r 輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。每輪比賽的對陣安排與該輪比賽開始前的排名有關 第1 名和...
洛谷1309 瑞士輪 題解
我覺得我大概已經是個zz了,普及題都不會做還得看題解,難受。o rnlogn 肯定過不了 過了也沒意義 複雜度能降下來肯定序列是有規律可循的。於是可以發現,勝者組和敗者組他們的s永遠都是單調減的。然後就把兩個有序的勝者組和敗者組合並就行了,和歸併排序差不多。我的智商已如風中殘燭。include in...
洛谷P1309 瑞士輪
本題同樣是noip普及組第三題。因為太久沒有做過題目了,先從普及組開始練習吧。題目內容 很顯然想到的思路就是模擬,如下 include include include include using namespace std struct player bool cmp player a,player...