NOIp2011pj 瑞士輪 歸併排序

2021-09-02 19:21:52 字數 1001 閱讀 9924

在某谷上刷水時遇到的 直接打了大暴力 但是只有70

看題解說要用歸併排序 sort會t只有60

然而我的sort有70 沒有t wa了3個點也不知道是為什麼 但好像都是大資料沒有過

案發現場

然而之前學歸併的時候並沒有很認真 好像就只記得逆序對了

所以好學的 我還是來複習一下

【以下十分簡略+毒瘤 僅供參考】

歸併排序的本質就是分治 分而治之的思想

網上看到乙個圖 非常言簡意賅的說明了歸併的中心思想

就是將乙個陣列分成很多很多份,再按照順序依次排回去

我們先以這個非常經典的題目為例子

我是用的遞迴的寫法

#includeint s[100005],t[100005],n;

long long tot;

void merge(int left,int mid,int right)

} while(i<=mid)

t[k++]=s[i++];

while(j<=right)

t[k++]=s[j++];

//以上兩個while 將可能剩下的數放完

for(int i=left;i<=right;i++)

s[i]=t[i-left];

}void mergesort(int l,int r)

a[2*maxn],win[maxn],lose[maxn];

int n,r,q;

bool cmp(node x,node y)

merge(win+1,win+n1+1,lose+1,lose+n2+1,a+1,cmp);

//_(:з」∠)_ 我為什麼把merge寫在了內層迴圈裡面

}printf("%d\n",a[q].id);

return 0;

}

瑞士輪(歸併)

2 n名編號為1 2n的選手共進行r輪比賽。每輪比賽開始前,以及所有比賽結束後,都會對選手進行一次排名。排名的依據是選手的總分。選手的總分為第一輪開始前的初始分數加上已參加過的所有比賽的得分和。總分相同的,約定編號較小的選手排名靠前。每輪比賽的對陣安排與該輪比賽開始前的排名有關 第1名和第2名 第3...

NOIP2011普及組 瑞士輪

題目 洛谷p1309 codevs1132 vijos p1771 題目大意 要你模擬瑞士輪賽制,求出r輪後第q名選手的編號。解題思路 首先對所有選手按分數從大到小進行排序,然後模擬比賽。因為原本是排好序的,贏的加1分,輸的扣1分,所以贏的人和輸的人也是分別有序的。所以我們可以把每輪贏的人扔進乙個陣...

NOIP 2011普及組 瑞士輪

背景 在雙人對決的競技性比賽,如桌球 羽毛球 西洋棋中,最常見的賽制是淘汰賽和迴圈賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公 平,偶然性較低,但比賽過程往往十分冗長。本題中介紹的瑞士輪賽制,因最早使用於 1895 年在瑞士舉辦的西洋棋比賽而得名。它可以看作是淘汰賽與...