1. 程式人生 > 其它 >關於圖論演算法

關於圖論演算法

題目描述

 

 

賽馬是一古老的遊戲,早在公元前四世紀的中國,處在諸侯割據的狀態,歷史上稱為“戰國時期”。在魏國作官的孫臏,因為受到同僚龐涓的迫害,被齊國使臣救出後,到達齊國國都。 賽馬是當時最受齊國貴族歡迎的娛樂專案。上至國王,下到大臣,常常以賽馬取樂,並以重金賭輸贏。田忌多次與國王及其他大臣賭輸贏,屢賭屢輸。一天他賽馬又輸了,回家後悶悶不樂。孫臏安慰他說:“下次有機會帶我到馬場看看,也許我能幫你。” 孫臏仔細觀察後發現,田忌的馬和其他人的馬相差並不遠,只是策略運用不當,以致失敗。 比賽前田忌按照孫臏的主意,用上等馬鞍將下等馬裝飾起來,冒充上等馬,與齊王的上等馬比賽。第二場比賽,還是按照孫臏的安排,田忌用自己的上等馬與國王的中等馬比賽,在一片喝彩中,只見田忌的馬竟然衝到齊王的馬前面,贏了第二場。關鍵的第三場,田忌的中等馬和國王的下等馬比賽,田忌的馬又一次衝到國王的馬前面,結果二比一,田忌贏了國王。 就是這麼簡單,現在淵子也來賽一賽馬。假設每匹馬都有恆定的速度,所以速度大的馬一定比速度小的馬先到終點(沒有意外!!)。不允許出現平局。最後誰贏的場數多於一半(不包括一半),誰就是贏家(可能沒有贏家)。淵子有 N(1<=n<=1000)匹馬參加比賽。對手的馬的數量與淵子馬的數量一樣,並且知道所有的馬的速度。聰明的你來預測一下這場世紀之戰的結果,看看淵子能否贏得比賽。

 

 

 

 

輸入

輸入有多組測試資料。 每組測試資料包括 3 行: 第一行輸入 N。表示馬的數量。 第二行有 N 個整型數字,即淵子的 N 匹馬的速度。 第三行有 N 個整型數字,即對手的 N 匹馬的速度。 當 N 為 0 時退出。

輸出

若通過聰明的你精心安排,如果淵子能贏得比賽,那麼輸出YES。 否則輸出NO。

 

樣例輸入

5
2 3 3 4 5
1 2 3 4 5
4
2 2 1 2
2 2 3 1
0

 

樣例輸出

YES
NO

 

#include<iostream>
#include<algorithm>
using namespace
std; int main() { int n; while (cin >> n) { int y = 0; if (n == 0) { break;//輸入為0時停止 } int* p = new int[n]; int* k = new int[n];//預設升序 for (int i = 0; i < n; i++) { cin >> p[i]; }
for (int j = 0; j < n; j++) { cin >> k[j];//貌似cin.getline更方便 } sort(p, p + n); sort(k, k + n); for (int g = 0; g < n;) { for (int r = 0; r < n;r++) { if (p[r] >k[g]) { g++; y++;//內層迴圈為淵子的馬,依次最優比較 } } g++;//防止死迴圈 } if (y * 2 > n) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }