題目:洛谷p1309、codevs1132、vijos p1771
題目大意:要你模擬瑞士輪賽制,求出r輪後第q名選手的編號。
解題思路:首先對所有選手按分數從大到小進行排序,然後模擬比賽。
因為原本是排好序的,贏的加1分,輸的扣1分,所以贏的人和輸的人也是分別有序的。
所以我們可以把每輪贏的人扔進乙個陣列,輸的人扔進另乙個陣列,然後歸併就行了。
c++可以用algorithm裡的sort()和merge()實現排序和歸併。
時間複雜度o(2nr)。
注意n最大100000,所以最多有200000人,開陣列要開200000。
c++ code:
#include#includeusing namespace std;struct playerelse
} merge(lft+1,lft+n+1,rght+1,rght+n+1,a+1);
} printf("%d\n",a[q].num);
return 0;
}
NOIP 2011普及組 瑞士輪
背景 在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公 平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於 1895 年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與...
NOIP2011普及組第3題 瑞士輪
2 n名編號為1 2n的選手共進行r輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。每輪比賽的對陣安排與該輪比賽開始前的排名有關 第1名和第2名 第3名和第4...
NOIP2011複賽普級組 瑞士輪
解題思路 先讀入資料,用快排對所有選手按照實力值排序,然後模擬,每打一場比賽就把贏的和輸的分為兩個有序陣列,再進行歸併,最後按要求輸出即可。程式 const maxn 100000 vara array 0.2 maxn,1.3 of longint b,c array 0.maxn,1.3 of ...