Description
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
Input
第一行为一个正整数n (n < = 1000) ,表示双方马的数量。 第二行有N个整数表示田忌的马的速度。 第三行的N个整数为齐王的马的速度。
Output
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。
Sample Input
3
92 83 71
95 87 74
Sample Output
200
具体的思路是,先让田最快的马和王最快的马比较,若胜利则就进行比赛
然后让田最慢的马和王最慢的比较,若能获胜就比较
反之,就让田最快的一匹马和王最快的一匹马去比赛,用自己的下等马去消耗掉王的上等马。
分别用 两个指针来表示田的最快的马和最慢的马 和王最快的马和最慢的马。
#include <iostream>
#include <algorithm>
#include <set>
#include <string>
#include <map>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100005;
bool m(int x,int y)
{
return x<y;
}
int tj[100];
int k[100];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>tj[i];
for(int i=1;i<=n;i++)
cin>>k[i];
sort(tj+1,tj+1+n,m);
sort(k+1,k+1+n,m);
int tjmax=n,tjmin=1;
int kmax=n,kmin=1;
int c=0;
while(tjmax>=tjmin)
{
if(tj[tjmax]>k[kmax])
{
c++;
tjmax--;
kmax--;
}
else
if(tj[tjmin]>k[kmin])
{
c++;
tjmin++;
kmin++;
}
else
if(tj[tjmin]<k[kmax])
{
c--;
tjmin++;
kmax--;
}
}
cout<<c*200<<endl;
return 0;
}