題目點這裡
剛開始想用sort一遍一遍的排,最後發現超時只能過70%
看了大佬們的題解才知道要用歸併排序,sort適合隨機的數列。
sort時間複雜度不穩定:o(nlogn)(可能還會更高) 歸併排序時間複雜度穩定:o(n)
詳細看**
#include
#include
using
namespace std;
struct nodea[
201020
],b[
101010
],c[
101010];
//a合併的數值,b勝利的一方,c失敗的一方
int n,r,q;
bool
cmp(node x,node y)
//結構體排序
void
merge()
//歸併
else
} d1=
1,d2=
1,d=1;
while
(d1<=n/
2&&d2<=n/2)
//把陣列b,c合併到陣列a
while
(d1<=n/
2)a[d++
]=b[d1++];
//有可能還有漏掉的全部排在後面
while
(d2<=n/
2)a[d++
]=c[d2++];
}int
main()
for(
int i=
1;i<=n;i++
) cin>>a[i]
.pow;
sort
(a+1
,a+1
+n,cmp)
;for
(int i=
1;i<=r;i++
)merge()
;
cout<.num
}
P1309 瑞士輪 歸併排序
題目鏈結 題目背景 在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於1895年在瑞士舉辦的西洋棋比賽而得名。它可以看作是...
洛谷 P1309 瑞士輪(歸併排序)
在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於18951895年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈...
洛谷P1309 瑞士輪(模擬,歸併排序)
題目描述 2 n名編號為1 2n的選手共進行r輪比賽。每輪比賽開始前,以及所有比賽結束後,都會按照總分從高到低對選手進行一次排名。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。每輪比賽的對陣安排與該輪比賽開始前的排名有關 第1名和第2名 第...