Tian Ji -- The Horse Racing POJ - 2287(贪心)

田忌赛马的故事大家都听过吧,仔细分析下本题思路大致相同

1.田忌最快的马大于齐王最快的马,直接比之

2.田忌最快的马小于齐王最快的马,拿田忌最慢的马比之

3.田忌最快的马和齐王最快的马速度相等,注意此时要分类讨论

               1.田忌最慢的马大于齐王最慢的马,比之

                2.田忌最慢的马小于齐王最慢的马,拿田忌最慢的马和齐王最快的马比之

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;

const int maxn = 1010;
int a[maxn], b[maxn];
int n, money, l1, l2, r1, r2;
int main()
{
    scanf("%d",&n);
    while(n != 0){
        for(int i = 0; i < n; i++)
            scanf("%d",&a[i]);
        for(int i = 0; i < n; i++)
            scanf("%d",&b[i]);

        sort(a, a+n);
        sort(b, b+n);

        money = 0;
        l1 = l2 = 0;  //表示当前马下标也就是最快的马的下标
        r1 = r2 = n-1; //表示马的总数和最后一个马也就是最慢的马下标

        while(l1 <= r1){
            if(a[r1] > b[r2]){ //田忌最快的马比齐王最快的马快,直接比
                money += 200;
                --r1; --r2;
            }
            else if(a[r1] < b[r2]){ //田忌最快的马比齐王最快的马慢,则拿最慢的比
                money -= 200;
                ++l1; --r2;
            }
            else{ //速度相等
                if(a[l1] > b[l2]){ //若田忌最慢的马比齐王最慢的马要快,则比两匹最慢的马
                    money += 200;
                    ++l1; ++l2;
                }
                else{ //否则用田忌最慢的马和齐王最快的马比
                    if(a[l1] < b[r2]) money -= 200;
                    ++l1; --r2;
                }
            }
        }
        printf("%d\n",money);
        scanf("%d",&n);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/82345215