不得不說,真是一道很nice的題。極大助於理解歸併排序的本質(其實就是兩個有序表的依次對比合併加入而已)(貌似庫函式有個merge函式這裡說了。。)
快速排序快(適用於整個序列無序較多的情況下)
歸併排序(適用於序列大多有序的情況,更快。因為基本有序時sort還要打亂再排所以很浪費時間,歸併就快多了每次順序合併即可)
對於本題,兩個序列本來就是有序的(贏的一組,數的一組,肯定依次遞降),就省去了歸的步驟,直接進行並(合併)就行了,所以效率很高。
1 #include 2 #include3 #include 4 #include 5 #include 6 #include 7
using
namespace
std;
8const
int maxn=1e6+5
;9 typedef long
long
ll;10 typedef unsigned long
long
ull;
11int
n,r,q;
12struct
px13
t[maxn],temp[maxn],a[maxn],b[maxn];
18bool
cmp(px aa,px bb)
1923
24void
marray()
2538}39
40while(i<=n) temp[k++]=a[i++];
41while(j<=n) temp[k++]=b[j++];
4243
for(int i=1;i<=k-1;i++) t[i]=temp[i];//
更新原陣列,為了下次再利用44}
4546
47int
main()
4857
for(int i=1;i<=n*2;i++) cin>>t[i].w;
5859 sort(t+1,t+1+n*2
,cmp);
60//
for(int i=1;i<=n*2;i++) cout<61
while(r--)
6272
else
7378}79
marray();
80//
for(int i=1;i<=n*2;i++) cout<81}82
83 cout8485
return0;
86 }
完。
洛谷P1309 瑞士輪
本題同樣是noip普及組第三題。因為太久沒有做過題目了,先從普及組開始練習吧。題目內容 很顯然想到的思路就是模擬,如下 include include include include using namespace std struct player bool cmp player a,player...
洛谷p1309 瑞士輪
因為太菜不會寫p1310 表示式的值,就只能過來水兩篇部落格啦qwq 另外這個題我是開o2才過的 雖然是寫了歸併排序 可能我太菜寫的歸併不是還可以 剪枝 吧qwq 哎,果真還是太菜啦qwq 所以準備寫歸併然後去題解學習正確的不用開o2就可以過的演算法 瑞士輪 題目鏈結 其實這個題打眼一看可以直接so...
洛谷 P1309 瑞士輪
在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於1895年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與迴圈賽的折中...