poj2287题解

题目有几种情况
1.田忌最快的马比齐威王最快的马快
2.田忌最快的马比齐威王最快的马慢
3.田忌最快的马和齐威王最快的马速度相等
(1)田忌最慢的马比齐威王最慢的马速度快
(2)田忌最慢的马比齐威王最慢的马速度慢或者相等

//Memory 176K Time 63MS
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    while (scanf("%d", &n), n) {

        int maxMoney = 0;
        double arrT[1010], arrQ[1010];
        for (int i = 0; i < n; i++)
            scanf("%lf", &arrT[i]);
        for (int i = 0; i < n; i++)
            scanf("%lf", &arrQ[i]);

        sort(arrT, arrT + n);
        sort(arrQ, arrQ + n);

        int indexLeftT = 0, indexLeftQ = 0, indexRightT = n - 1, indexRightQ = n - 1;

        while (indexLeftT <= indexRightT) {
            if (arrT[indexRightT] > arrQ[indexRightQ])
                maxMoney += 200, indexRightT--, indexRightQ--;
            else if (arrT[indexRightT] < arrQ[indexRightQ])
                maxMoney -= 200, indexLeftT++, indexRightQ--;
            else {
                //田忌最快的马和齐威王最快的马速度相等
                //即比较双方最慢的马
                if (arrT[indexLeftT] > arrQ[indexLeftQ])
                    maxMoney += 200, indexLeftT++, indexLeftQ++;
                else {   //田忌最慢的马比齐威王最慢的马要慢或者相等

                    //这里可能出现两种情况(1)田忌最慢的马和齐威王最快的马速度一样
                    //则为平局
                    //(2)田忌最慢的马比齐威王最快的马慢
                    if (arrT[indexLeftT] < arrQ[indexRightQ])
                        maxMoney -= 200, indexLeftT++, indexRightQ--;
                    else if (arrT[indexLeftT] == arrQ[indexRightQ])
                        indexLeftT++, indexRightQ--;

                }

            }

        }

        printf("%d\n", maxMoney);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值