Polycarp's Pockets
time limit per test 1 second
memory limit per test 256 megabytes
input standard input
output standard output
Polycarp has nn coins, the value of the ii-th coin is aiai. Polycarp wants to distribute all the coins between his pockets, but he cannot put two coins with the same value into the same pocket.
For example, if Polycarp has got six coins represented as an array a=[1,2,4,3,3,2]a=[1,2,4,3,3,2], he can distribute the coins into two pockets as follows: [1,2,3],[2,3,4][1,2,3],[2,3,4].
Polycarp wants to distribute all the coins with the minimum number of used pockets. Help him to do that.
Input
The first line of the input contains one integer nn (1≤n≤1001≤n≤100) — the number of coins.
The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1001≤ai≤100) — values of coins.
Output
Print only one integer — the minimum number of pockets Polycarp needs to distribute all the coins so no two coins with the same value are put into the same pocket.
Examples
input
6
1 2 4 3 3 2
output
2
input
1
100
output
1
题解
题意大致是:小明买了n条锦鲤,要分几次送给小红,还是老样子,想让小红开心,就要递增且分批送,不过这次小明想知道需要送几次才能把锦鲤送完,毕竟隔太久万一养不好养死了呢。。。(我不会说我把自己家的小鱼养死的事情的。。)
这次要求的是次数,在之前的代码上改一下就好
# include <cstdio>
# include <algorithm>
# include <cstring>
using namespace std;
const int maxn = 1e2+ 10;
int main()
{
int n;
scanf("%d",&n);
int a[maxn];
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int mark = 0, flag = -1, st = 0;
while(st < n)
{
for(int i=0;i<n;i++)
{
if(a[i] > flag)
{
flag = a[i];
a[i] = -1;
st++;
}
}
mark++;
flag = -1;
}
printf("%d\n",mark);
return 0;
}
还有一种简单的方法,找大小相同的锦鲤最多有多少只,就知道最多要送多少次了
# include <cstdio>
# include <algorithm>
using namespace std;
const int maxn = 100 + 10;
int main()
{
int n;
scanf("%d",&n);
int a[maxn];
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int mark = 1;
int maxa = 1;
for(int i=0;i<n-1;i++)
{
if(a[i]==a[i+1]) mark++;
else mark = 1;
maxa = max(maxa,mark);
}
printf("%d\n",maxa);
return 0;
}