1. 程式人生 > >POJ 2287 - Tian Ji -- The Horse Racing(田忌賽馬) 題解

POJ 2287 - Tian Ji -- The Horse Racing(田忌賽馬) 題解

ons for amp 匹配 void 代碼 div line 比賽

此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。

題目鏈接:http://poj.org/problem?id=2287

題目大意:

田忌賽馬的故事就不用多說了吧....

輸入包含多組數據(<=50),以0作為結束標誌。

每組數據的第一行給出一個數n(n<=1000),表示齊王和田忌各有多少匹馬。

第二行有n個數,表示田忌的馬的速度值。

第三行有n個數,表示齊王的馬的速度值。

在比賽中,速度值較大的馬一定獲勝。約定每局比賽中敗者付給勝者200銀幣,平局則雙方均無損失。問田忌最多能贏得多少銀幣。

Sample Input

3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
0

Sample Output

200
0
0

分析:

洛谷上也有類似的題(P1650),然而洛谷的題目描述裏提到了二分圖匹配,好像把人給嚇到了2333

貪心。先把馬的速度值從小到大排個序。

每一局比賽,先判斷當前田忌最快的馬能否戰勝齊王最快的馬,如果能,則贏得200銀幣,否則進行第二步判斷。

第二步:判斷當前田忌最慢的馬能否戰勝齊王最慢的馬,如果能,則贏得200銀幣,否則用最慢的馬去對戰齊王最快的馬,失去200銀幣。

還要註意平局的情況,如果田忌和齊王最慢的馬速度相等,且最慢的馬和最快的馬速度也相等,才有平局的必要(而且只能平局)。

否則用最慢的馬去對戰齊王最快的馬,結果不會更壞。

其實在判斷的時候是不需要把a,b變成0的,反正你之後也不可能再遇到....窩只是強迫癥一下qwq

AC代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 
 6 const int MAXN = 2005;
 7 
 8 inline void read(int &x)
 9 {
10     char ch = getchar(),c = ch;x = 0;
11     while(ch < 0 || ch > 9) c = ch,ch = getchar();
12 while(ch <= 9 && ch >= 0) x = (x<<1)+(x<<3)+ch-0,ch = getchar(); 13 if(c == -) x = -x; 14 } 15 16 int a[MAXN],b[MAXN]; 17 // 田忌馬 齊王馬 18 int n,m,ans = 0; 19 20 inline void init() 21 { 22 m = n,ans = 0; 23 memset(a,0,sizeof(a)); 24 memset(b,0,sizeof(b)); 25 } 26 27 int main() 28 { 29 30 read(n); 31 while(n) 32 { 33 init(); 34 for(int i = 1;i <= n;++ i) 35 read(a[i]); 36 for(int i = 1;i <= n;++ i) 37 read(b[i]); 38 std::sort(a+1,a+1+n); 39 std::sort(b+1,b+1+n); 40 if(a[n] < b[1]) 41 ans = -200*n; 42 else if(a[1] > b[n]) 43 ans = 200*n; 44 //兩種特殊情況:全輸/全贏 45 else 46 { 47 int i = 1,j = 1; 48 while(i <= n && j <= m) 49 { 50 if(a[n] > b[m]) 51 { 52 a[n--] = 0,b[m--] = 0,ans += 200; 53 } 54 else if(a[i] > b[j]) 55 { 56 a[i++]= 0,b[j++] = 0,ans += 200; 57 } 58 else if(a[i] == b[j] && a[i] == b[m]) 59 { 60 a[i++] = 0,b[j++] = 0; 61 } 62 else 63 a[i++] = 0,b[m--] = 0,ans -= 200; 64 } 65 } 66 printf("%d\n",ans); 67 read(n); 68 } 69 return 0; 70 }

POJ 2287 - Tian Ji -- The Horse Racing(田忌賽馬) 題解