码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1052

时间:2014-10-29 18:27:19      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   ar   for   sp   

http://acm.hdu.edu.cn/showproblem.php?pid=1052

田忌赛马本质就是一个贪心

res表示田忌的胜利场次

1、田忌最快马快于王的最快马,两个最快马比,res++

2、田忌最快马慢于王的最快马,田忌的最慢马和王的最快马比,res--

3、田忌最快马等于王的最快马,分三种情况

   田忌最慢马快于王的最慢马,两个最慢马比,res++

   田忌最慢马慢于王的最慢马,田忌的最慢马和王的最快马比,res--

     田忌最慢马等于王的最慢马,田忌的最慢马和王的最快马比,如果田忌的最慢马慢于王的快马res--(这个判断为了排除两个相等的情况,第二个样例给的非常厚道)

这题当年似乎让很多人饮恨,其实现场赛对于大多数队伍来讲,不用出什么真正的难题,需要的只是把这种题目做稳,理清思路,不慌张。当时会去敲二分图最大匹配的选手肯定已经乱了(因为理性思考的话,1000点的稠密图二分图最大匹配没有一丝生机,尽管1000看似诱人),同时不得不说,数据上限是1000的贪心非常阴险,如果出成10w应该会有更多人ac。

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int a[1005],b[1005];

int main(){
    int n,f1,r1,f2,r2;
    while(~scanf("%d",&n),n){
        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);
        f1=f2=0;r1=r2=n-1;
        int cnt=0;
        int res=0;
        while(1){
            if(a[r1]>b[r2]){
                res++;
                r1--;r2--;
            }
            else if(a[r1]<b[r2]){
                res--;
                f1++;r2--;
            }
            else{
                if(a[f1]>b[f2]){
                    res++;
                    f1++;f2++;
                }
                else if(a[f1]<b[f2]){
                    res--;
                    f1++;r2--;
                }
                else{
                    if(a[f1]<b[r2])res--;
                    f1++;r2--;
                }
            }
            cnt++;
            if(cnt==n)break;
        }
        printf("%d\n",res*200);
    }
    return 0;
}
View Code

 

HDU 1052

标签:style   blog   http   io   color   os   ar   for   sp   

原文地址:http://www.cnblogs.com/xiaohongmao/p/4059863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!