【題目】
Description
田忌和齊王賽馬,兩人各出n匹馬,贏一場比賽得200兩銀子,輸了賠200銀子,平局不賠不賺.已知兩人每匹馬的速度,問田忌最多能贏多少銀子.
Input
多組測試數據,
每組數據的第一行是一個整數n。 (1<=n<=1000)
第二行包括n個整數既田忌每匹馬的速度.
第三行包括n個整數既齊王每匹馬的速度.
每匹馬的速度不超過1000.
Output
對於每組數據輸出一行有一個整數代表田忌最多能贏多少銀子
Sample Input
3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
Sample Output
200
0
0
【題意】
分別給定田忌的馬和齊王的馬的速度,要求輸出使用最優策略田忌最多能贏多少銀子。
【思路】
田弱跟齊弱比較,若田弱>齊弱,則田忌勝;田強跟齊強比較,若田強>齊強,則田忌勝;否則就拿田弱拉齊強下水,田忌輸一場(當然如果是平局就不勝也不敗)。
爲什麼要優先判斷田強和齊強而不直接田弱拉齊強下水呢~因爲,假如田弱=齊弱,而田強>齊強,如果田弱拉齊強下水,那麼不就白白敗一場了嗎~
【代碼】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1005],b[1005];
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++) scanf("%d",&b[i]);
sort(a,a+n); sort(b,b+n);
int ans=0,i=0,j=0,ii=n-1,jj=n-1;
while(i<=ii)
{
if(a[ii]>b[jj]) ans++,ii--,jj--;
else if(a[i]>b[j]) ans++,i++,j++;
else
{
if(a[i]!=b[jj]) ans--;
i++,jj--;
}
}
printf("%d\n",ans*200);
}
return 0;
}