https://vjudge.net/problem/UVALive-3266

题意:

田忌赛马,赢一局得200两银子,输一局赔200两银子,平局不赔不赚,问最多能赚多少银子。

思路:

先排序,然后比较两者最快的马,如果田忌的更快,就直接比。如果田忌的慢,先比较最慢的两匹马,如果田忌的快,则先让这两匹最慢的马比,之后继续比较第二慢的马,直到田忌的马慢于齐王的马时,用此时田忌最慢的马和齐王最快的马相比。

 #include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = + ; int a[maxn];
int b[maxn];
int n; int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n && n)
{
for (int i = ; i < n; i++)
cin >> a[i];
for (int i = ; i < n; i++)
cin >> b[i];
sort(a, a + n);
sort(b, b + n);
int sum = ;
int p1 = , p2 = n - , q1 = , q2 = n - ;
while (n--)
{
if (a[p2]>b[q2])
{
p2--;
q2--;
sum += ;
}
else if (a[p1] > b[q1])
{
p1++;
q1++;
sum += ;
}
else if (a[p1]<b[q2]) //用最慢的和齐王对快的比
{
p1++;
q2--;
sum -= ;
}
else //平局的情况
{
p1++;
q2--;
}
}
cout << sum << endl;
}
}
05-11 19:21