您的位置:首页 > 其它

HDOJ.1800 Flying to the Mars(贪心+map)

2016-11-25 16:38 330 查看

Flying to the Mars

点我挑战题目

题意分析

有n个人,每个人都有一定的等级,高等级的人可以教低等级的人骑扫帚,并且他们可以共用一个扫帚,问至少需要几个扫帚。

这道题与最少拦截系统有异曲同工之妙。不同在于这道题可以排序,而最少拦截系统不能排序。我们想一下,把这些人排好序,并统计每个等级的人的个数。一次从最高等级到最低等级划掉一个人(可以理解为这些人互相教并且骑一个扫帚),一直划,直到最后一个人。这样可以看出来,扫帚的数量肯定是由某个等级的人数确定的。并且那个等级的人数最多。因此,只要统计出等数最多的等级就好,最后输出那个等级的人数。我采用了map映射,这样较为简单。

代码总览

/*
Title:HDOJ.1800
Author:pengwill
Date:2016-11-25
*/
#include <iostream>
#include <algorithm>
#include <map>
#include <stdio.h>
#define max 3005
using namespace std;
typedef map<int,int> mp;
mp p; mp::iterator iter;

int main()
{
int n;
while(scanf("%d",&n) != EOF){
int i,temp;
for(i = 0;i<n;i++){
scanf("%d",&temp);
p[temp]++;
}
int nmax = 0;
for(iter = p.begin();iter != p.end();iter++){
if(iter->second > nmax){
nmax = iter->second;
//titer = iter;
}
}
p.clear();
printf("%d\n",nmax);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: