某体育比赛在甲乙两队中进行,两队参赛的人数相同,要求所有队员必须参赛且只能参加一次比赛。每次比赛,甲乙双方各派出一人与对方进行比赛,总胜出人数最多的队将获得比赛最终的胜利。为了取得比赛的胜利,教练在比赛前需要进行相应的排兵布阵。教练在排兵布阵时,往往会参考双方队员以往的成绩,并给出一个综合性的评分,如果某队队员相比另一队队员的评分高,则获胜的机率就越高。
输入要求:输入的第一行包含一个整数n,表示甲乙双方出场的总人数。其后的2行,每行包含n个整数,分别表示甲乙两队各个队员的评分成绩。
输出要求:输出一个整数k,表示甲队最大可能赢得的场次。
样例输入:
3
92 83 71
95 87 74
样例输出:
2
一求解思路
首先看两队最高成绩,如果甲队高,直接比。如果乙队高,让甲队最差与乙队最高比;
其次看两队最差成绩,如果甲队高,直接比。如果乙队高,让甲队最差与乙队最高比;
二 程序代码
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxsize 999
int A[Maxsize];//甲队平均成绩
int B[Maxsize];//乙队平均成绩
int ans=0;
int n;
void CherryMiss()
{
int Aleft = 0;
int Aright = n - 1;//甲队指针
int Bleft = 0;
int Bright = n - 1;//乙队指针
while (Aleft <= Aright)
{
//第一种情况,甲队最好成绩>乙队最高的,那么就让他们比,甲队赢
if (A[Aright] > B[Bright])
{
ans++;
Aright--;
Bright--;//对应位置左移
}
else if (A[Aright] < B[Bright])//甲队最好成绩 < 乙队最高的,那么就让甲队最弱的和乙队最强的打
{
Aleft++;
Bright--;
}
else//甲队最好成绩 = 乙队最高的
{
if (A[Aleft] > B[Bleft])//如果甲队最差的比乙队最差的好,就让他们比
{
ans++;
Aleft++;
Bleft++;
}
else if (A[Aleft] < B[Bleft])//如果甲队最差的比乙队最差的差,就让甲队最弱的和乙队最强的打
{
Aleft++;
Bright--;
}
}
}
}
int main()
{
cin >> n;
for (int i = 0;i < n;i++)
{
cin >> A[i];
}
for (int i = 0;i < n;i++)
{
cin >> B[i];
}
sort(A,A + n);
sort(B,B + n);
CherryMiss();
cout << ans;
return 0;
}