题意
有N个数,如果可以抽出一个序列x1 < x2 < .. < xn,那么这个序列只需要花费一个扫帚,问这N个数最少需要多少个扫帚(一个数被抽出以后不能再使用)
题解
看有很多题解使用字典树做这道题,其实完全没有必要,一道MAP水题。需要的扫帚个数就是出现最多的数字个数。
注意事项
注意不要使用string取读,可能存在’001’,’01’,’1’这样的情况,事实上这三个字符串代表同一个数。
代码
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<string>
#include<set>
#include<map>
#include<bitset>
#include<stack>
#include<string>
#define UP(i,l,h) for(int i=l;i<h;i++)
#define DOWN(i,h,l) for(int i=h-1;i>=l;i--)
#define W(a) while(a)
#define MEM(a,b) memset(a,b,sizeof(a))
#define LL long long
#define INF 0x3f3f3f3f3f3f3f3f
#define MAXN 120050
#define MOD 1000000007
#define EPS 1e-3
using namespace std;
map<int,int> mp;
int main(){
int n;
W(~scanf("%d",&n)){
mp.clear();
int s;
UP(i,0,n) scanf("%d",&s),mp[s]++;
int mx=1;
for(auto x:mp) if(x.second>mx) mx=x.second;
printf("%d\n",mx);
}
}