HDU1052-Tian Ji -- The Horse Racing-贪心

https://vjudge.net/problem/HDU-1052
贪心的策略是很好理解的。
一开始没有理解。以为只要让最大的和最小的颠倒就好了。。
其实关键就是 找最小的来凑数。
当田鸡最快的马大于 齐王时,比较
慢于齐王时,用最慢的来代替。
如果相等时,看最慢的马
如果田慢大于齐慢,直接赢
否则,就让他去代替。
(不用管太多,唯一需要注意的就是相等的情况,所以还要判断一下他和齐快的大小。。万一相等了呢)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
/*这道题是贪心的好题。开始以为直接排序就可以,
再换一下 首尾的顺序。
后来才发现不是。
4 3 2 1
1 4 3 2如果4干不过3但可以干过2,还是应该调整一下的。。
如果 田鸡最快的快,那么直接比较
如果慢,用最慢的上。
如果相等,看最慢的,如果田鸡最慢的有优势,直接比较
如果没有,就让慢的上
(注意一下是否比最大的慢,判断次数防止相等的情况)

*/
const int maxn=2000;
int main()
{   int t;
int a[maxn];
int b[maxn];
    while(~scanf("%d",&t))
    {  if(t==0) break;
        for(int i=0;i<t;i++)
    scanf("%d",&b[i]);
    for(int i=0;i<t;i++)
    scanf("%d",&a[i]);
    sort(a,a+t);
    sort(b,b+t);
    int max1=t-1;
    int max2=t-1;
    int min1=0;
    int min2=0;
    int win=0;
    while(min1<=max1&&min2<=max2)
    {  if(b[max1]>a[max2])
        {  win++;
            max1--;
            max2--;
            //printf("!%d %d\n",max1+1,max2+1);
            //continue;
        }
        else if(b[max1]<a[max2])
        {   win--;
            min1++;
            max2--;
            //printf("%d %d\n",max1-1,max2+1);
            //田鸡最慢对阵大王最快的
        }
        else
        {  if(b[min1]>a[min2])
             {   win++;
                min1++;
                min2++;
                //printf("@%d %d\n",min1-1,min1-1);
             }
             else
             {  if(b[min1]<a[max2])
                 win--;
                 min1++;
                max2--;
             }
        }

    }
    printf("%d\n",win*200);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值