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

题目链接: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;
}

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

时间: 2024-10-03 13:40:04

hdu 1800 Flying to the Mars 详细题解 哈希的相关文章

HDU 1800 Flying to the Mars (水题)

Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11099    Accepted Submission(s): 3572 Problem Description In the year 8888, the Earth is ruled by the PPF Empire . As the popul

hdu 1800 Flying to the Mars(水 ,贪心)

其实就是求最大的相同的数的多少.. 我是把它当字符串输入..解决前导0的问题.. #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; int main() { char s[35]; int w[3500]; __int64 qq[3500]; int a; while(~scanf("%d",&a

hdu 1800 Flying to the Mars(简单模拟,string,字符串)

题目 又来了string的基本用法 //less than 30 digits //等级长度甚至是超过了int64,所以要用字符串来模拟,然后注意去掉前导零 //最多重复的个数就是答案 //关于string的修改增加的用法 #include <cstdio> #include<iostream> #include <cstring> #include <algorithm> #include<string> using namespace std

HDU 1800 Flying to the Mars(字典树)

Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12767    Accepted Submission(s): 4048 Problem Description In the year 8888, the Earth is ruled by the PPF Empire . As the popu

--hdu 1800 Flying to the Mars(贪心)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1800 Ac code: #include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main(void) { int n,i,ma,t; int a[3005]; while(scanf("%d",&

HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树

http://acm.hdu.edu.cn/showproblem.php?pid=1800 字典树 #include<iostream> #include<string.h> #include<stdio.h> using namespace std; struct node { int sum; node *next[10]; node() { sum=0; memset(next, NULL, sizeof(next)); }; }; int ans; char

hdu 1800 Flying to the Mars

Problem Description In the year 8888, the Earth is ruled by the PPF Empire . As the population growing , PPF needs to find more land for the newborns . Finally , PPF decides to attack Kscinow who ruling the Mars . Here the problem comes! How can the

【贪心专题】HDU 1800 Flying to the Mars (寻找最大重复元素) &amp;&amp; HDU 2124 Repair the Wall (贪心)

链接:click here~~ 题意: 有n个士兵每个人有一个水平值,水平高的的人可以教低的人,意思就是求最合适的组合使花费最小 [解题思路] 刚看到此题,竟没有思路..想 了一会,其实找到最大重复元素的次数即可,因为相同的人肯定不能共用一个,所以求得最少即为最大的重复次数,跟前面一道题差不多,做完看了别人思路,发现用map容器来做很方便:map容器的内部是一个红黑树,我们是在对它的叶节点进行操作,一共有两个数,第二个数是作为计数用的. 代码: #include <stdio.h> #incl

杭电 1800 Flying to the Mars(贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=1800 Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10798    Accepted Submission(s): 3461 Problem Description In the year 8888, the