作业五 贪心算法

某体育比赛在甲乙两队中进行,两队参赛的人数相同,要求所有队员必须参赛且只能参加一次比赛。每次比赛,甲乙双方各派出一人与对方进行比赛,总胜出人数最多的队将获得比赛最终的胜利。为了取得比赛的胜利,教练在比赛前需要进行相应的排兵布阵。教练在排兵布阵时,往往会参考双方队员以往的成绩,并给出一个综合性的评分,如果某队队员相比另一队队员的评分高,则获胜的机率就越高。

输入要求:输入的第一行包含一个整数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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值