日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

瑞士轮(洛谷-P1309)

發(fā)布時間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 瑞士轮(洛谷-P1309) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目背景

在雙人對決的競技性比賽,如乒乓球、羽毛球、國際象棋中,最常見的賽制是淘汰賽和循環(huán)賽。前者的特點是比賽場數(shù)少,每場都緊張刺激,但偶然性較高。后者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。

本題中介紹的瑞士輪賽制,因最早使用于1895年在瑞士舉辦的國際象棋比賽而得名。它可以看作是淘汰賽與循環(huán)賽的折中,既保證了比賽的穩(wěn)定性,又能使賽程不至于過長。

題目描述

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

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

現(xiàn)給定每個選手的初始分數(shù)及其實力值,試計算在R 輪比賽過后,排名第 Q 的選手編號是多少。我們假設選手的實力值兩兩不同,且每場比賽中實力值較高的總能獲勝。

輸入輸出格式

輸入格式:

輸入的第一行是三個正整數(shù)N、R 、Q,每兩個數(shù)之間用一個空格隔開,表示有 2*N 名選手、R 輪比賽,以及我們關心的名次 Q。

第二行是2*N 個非負整數(shù)s1, s2, …, s2N,每兩個數(shù)之間用一個空格隔開,其中 si 表示編號為i 的選手的初始分數(shù)。 第三行是2*N 個正整數(shù)w1 , w2 , …, w2N,每兩個數(shù)之間用一個空格隔開,其中 wi 表示編號為i 的選手的實力值。

輸出格式:

輸出只有一行,包含一個整數(shù),即R 輪比賽結束后,排名第 Q 的選手的編號。

輸入輸出樣例

輸入樣例#1:

2 4 2?
7 6 6 7?
10 5 20 15?

輸出樣例#1:

1

說明

【樣例解釋】

【數(shù)據(jù)范圍】

對于30% 的數(shù)據(jù),1 ≤ N ≤ 100;

對于50% 的數(shù)據(jù),1 ≤ N ≤ 10,000 ;

對于100%的數(shù)據(jù),1 ≤ N ≤ 100,000,1 ≤ R ≤ 50,1 ≤ Q ≤ 2N,0 ≤ s1, s2, …, s2N≤10^8,1 ≤w1, w2 , …, w2N≤ 10^8。

思路:

暴力+歸并

每一次兩兩比較,贏的放在一個數(shù)組,輸?shù)姆旁诹硪粋€數(shù)組,因為之前已經(jīng)有序,可以保證兩數(shù)組前面的排名在后面之前,所以只要比較從兩數(shù)組開頭開始比就可以。

源代碼

#include<iostream> #include <algorithm> using namespace std; int N,R,Q; int initial[200000]={0},strength[200000]={0},order[2000000]={0}; int a[100000],b[100000];bool cmp(int x,int y) {if(initial[x]!=initial[y]) return initial[x]>initial[y];return x<y; }void merge_sort(int order[]) {int i,j,k;for(i=0,j=0,k=0;i<N&&j<N;k++)//合并a,b{if(cmp(a[i],b[j])){order[k]=a[i];i++;}else{order[k]=b[j];j++;}}for(;i<N;i++,k++) order[k]=a[i];//復制左邊子序列剩余for(;j<N;j++,k++) order[k]=b[j];//復制右邊子序列剩余}int main() {int i;cin>>N>>R>>Q;for(i=1;i<=2*N;i++) cin>>initial[i];for(i=1;i<=2*N;i++) cin>>strength[i];for(i=0;i<2*N;i++) order[i]=i+1;sort(order,order+2*N,cmp);//以成員序號order為i,對基礎成績進行降序排序for(;R>0;R--)//共進行進行R輪比賽{for(i=0;i<N;i++)//每輪進行N次{if( strength[order[2*i]] > strength[order[2*i+1]] ){initial[order[2*i]]++;a[i]=order[2*i];b[i]=order[2*i+1];}else{initial[order[2*i+1]]++;a[i]=order[2*i+1];b[i]=order[2*i];}}merge_sort(order);//合并結果到order}cout<<order[Q-1]<<endl;return 0; }

總結

以上是生活随笔為你收集整理的瑞士轮(洛谷-P1309)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。