Poj 2287 田忌赛马解题详解(贪心思想)

题意是:田忌赛马的故事,两个人赛马,第一行输入的数是两个人马的匹数,都是相同的,第二行输入的是田忌的马的强弱值,第三行输入的是国王马的强弱值,然后如果n==0则程序结束。
解题思路:贪心思想
如果田忌的最强马大于国王的最强马直接比
如果田忌的最强马小如国王的最强马拿最弱的那匹马跟国王的最强马比
如果田忌的最强马等于国王的最强马拿最弱的那匹马国王比较
如果·最弱的马跟最弱的马相等直接比较

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n;
const int maxn = 100000;
int a[maxn];//田忌的马
int b[maxn];//齐王的马
int cmp(int x1,int x2)
{
    return x1>x2;
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n == 0)
        {
            return 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,cmp);//进行从高到底的一次排序
        sort(b,b+n,cmp);
        long long  sum =0;
        int j = 0;
        int i = 0;
        int ti = n-1;//最弱的马的位置
        int tj = n-1;//国王最弱马的位置
        int flag = 0;//比的次数
        while(flag!=n)
        {
            flag++;
            if(a[i] > b[j])//如果田忌的最强马的力量大于国王最强马的力量就比
            {
                i++;
                j++;
                sum++;
            }
            else if(a[i] < b[j])//如果田忌的最强马小如国王的最强马的力量就用田忌最弱的马跟国王比输一场
            {
                ti--;
                j++;
                sum--;
            }
            else if(a[i] == b[j])//如果田忌的最强马跟国王最强马相等,
            {
                if(a[ti] == b[tj])//田忌的最弱马跟国王最弱马相等还是用田忌的最弱马跟国王的最强马相比较
                {
                    if(a[ti] == b[j])
                    {
                        ti--;
                        j++;
                    }
                    else if(a[ti] < b[j])//如果田忌的最弱马小如国王的最弱马
                    {
                        ti--;
                        j++;
                        sum--;
                    }
                }
                else if(a[ti] < b[tj])//田忌的最弱马小如国王的最弱马还是拿田忌的最弱马跟国王最强马拿来比较
                {
                    ti--;
                    j++;
                    sum--;
                }
                else if(a[ti] > b[tj])//如果田忌的最弱马大于国王的最弱马直接最弱马最弱马相比
                {
                    ti--;
                    tj--;
                    sum++;
                }
            }
        }
        sum = sum*200;
        printf("%lld\n",sum);
    }
    return 0;
}
/*
几组好的测试数据
8
11 9 8 8 8 4 3 2
11 8 8 8 8 4 3 2
答案:800
3
89 85 81
90 85 81
答案:200
3
2 3 5
3 4 4
答案:0
*/
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值