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

hdu 1800 Flying to the Mars 详细题解 哈希

时间:2015-08-12 19:20:41      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:哈希   hdu   算法   map   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1800

 

这道题目是道哈希的简单题,主要难度在于怎样将问题抽象画。

 

对于每一组数据,我要求它最少需要几把扫帚。

 

我们把2 4 5 6 4这组输入排序,变成了2 4 4 5 6,每一次取最长的一个递增序列,取的次数就是我们需要的答案,请仔细想想,若输入为2 4 5 6,那我们只需要一把扫帚就能装下所有人,但我们输入2 4 4 5 6,就需要两把了,我们每次都取了一个递增序列,为什么开始要一把,现在要两把呢?因为我还有一个人的等级也是4,而我已经有一个4而且序列必须递增,所以同样的等级4我只能取一个人。另一个只好留着下次取了。所以这个问题就抽象成了:求一组数中出现频率最大的那个数出现的次数!

 

这样想是不是很简单了?

 

每次输入一个数i,数组mp[i]++一次,之后把i的范围全部遍历一遍,把mp数组最大的一个元素输出就行了。(若对stl里面的map不了解可以自己百度一下)

 

贴个完整的代码:


#include <iostream>
#include <string>
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
    int n,max;
    map<int,int>mp;
    int num;
    while(scanf("%d",&n)!=EOF){
        mp.clear();
        max=0;
        while(n--){
            scanf("%d",&num);
            mp[num]++;
            if(mp[num]>max){
                max=mp[num];
            }
        }
        printf("%d\n",max);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu 1800 Flying to the Mars 详细题解 哈希

标签:哈希   hdu   算法   map   

原文地址:http://blog.csdn.net/xdz78/article/details/47449051

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