描述
賽馬是一古老的遊戲,早在公元前四世紀的中國,處在諸侯割據的狀態,歷史上稱爲“戰國時期”。在魏國作官的孫臏,因爲受到同僚龐涓的迫害,被齊國使臣救出後,到達齊國國都。
賽馬是當時最受齊國貴族歡迎的娛樂項目。上至國王,下到大臣,常常以賽馬取樂,並以重金賭輸贏。田忌多次與國王及其他大臣賭輸贏,屢賭屢輸。一天他賽馬又輸了,回家後悶悶不樂。孫臏安慰他說:“下次有機會帶我到馬場看看,也許我能幫你。”
孫臏仔細觀察後發現,田忌的馬和其他人的馬相差並不遠,只是策略運用不當,以致失敗。
比賽前田忌按照孫臏的主意,用上等馬鞍將下等馬裝飾起來,冒充上等馬,與齊王的上等馬比賽。第二場比賽,還是按照孫臏的安排,田忌用自己的上等馬與國王的中等馬比賽,在一片喝彩中,只見田忌的馬竟然衝到齊王的馬前面,贏了第二場。關鍵的第三場,田忌的中等馬和國王的下等馬比賽,田忌的馬又一次衝到國王的馬前面,結果二比一,田忌贏了國王。
就是這麼簡單,現在淵子也來賽一賽馬。假設每匹馬都有恆定的速度,所以速度大的馬一定比速度小的馬先到終點(沒有意外!!)。不允許出現平局。最後誰贏的場數多於一半(不包括一半),誰就是贏家(可能沒有贏家)。淵子有N(1≤N≤1000)匹馬參加比賽。對手的馬的數量與淵子馬的數量一樣,並且知道所有的馬的速度。聰明的你來預測一下這場世紀之戰的結果,看看淵子能否贏得比賽。
輸入
輸入有多組測試數據。
每組測試數據包括3行:
第一行輸入N(1≤N≤1000)。表示馬的數量。
第二行有N個整型數字,即淵子的N匹馬的速度。
第三行有N個整型數字,即對手的N匹馬的速度。
當N爲0時退出。
輸出
若通過聰明的你精心安排,如果淵子能贏得比賽,那麼輸出“YES”。
否則輸出“NO”。
樣例輸入
2 3 3 4 5
1 2 3 4 5
4
2 2 1 2
2 2 3 1
0
樣例輸出
NO
#include <stdio.h>
//對數組進行輸入void inPut(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
}
//使用冒泡排序,將兩人的馬按速度從小到大進行排序。
void sort(int a[],int n)
{
int i,j,t;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
int main()
{
int n,i,a[1002],b[1002],t_max,t_min,q_max,q_min,win;
double h;
while(scanf("%d",&n)!=EOF&&n!=0)
{
//輸入數據
inPut(a,n);
inPut(b,n);
//從小到大排序
sort(a,n);
sort(b,n);
//定義齊王和田忌的信息
//
//田忌的馬的最大速度與最小速度
t_max=n-1;t_min=0;
//齊王的馬的最大速度與最小速度
q_min=0;
//田忌勝利的局數
win=0;
//比較n次
for(i=0;i<n;i++){
//將田忌速度最小的馬和齊王速度最小的馬進行比較
//如果齊王贏,進行下一輪一比較,將雙方的角標加一,勝利的次數加一
if(a[t_min]>b[q_min]){
t_min++;
q_min++;
win++;
}
//如果田忌最小的馬速度小於齊王,則隱形的將田忌速度最小的馬與齊王速度最大的馬進行比較,將田忌角標加一,齊王角標減一。
else if(a[t_min]<b[q_min]){
t_min++;
q_max--;
}
else
{
//如果齊王和田忌最小速度的兩匹馬速度相同,則比較他兩速度最大的兩匹馬。
//如果田忌最大速度的馬比齊王快。則將雙方角標減一,勝利次數加一
if(a[t_max]>b[q_max]){
t_max--;
q_max--;
win++;
}
//如果田忌最大速度的馬比齊王慢。則將齊王角標減一,田忌角標加一
else if(a[t_max]<b[q_max])
{
q_max--;
t_min++;
}
//如果兩人速度最大的馬的速度相等,則將田忌最小速度和齊王最大速度比較,田忌角標加一,齊王角標減一
else{
if(a[t_min]<a[q_max])
{
t_min++;
q_max--;
}
}
}
}
//如果田忌勝利的次數大於所有次數的一半,則輸出yes,否則no
h=n/2;if(win>h)
printf("YES\n");
else printf("NO\n");
}
return 0;
}