题意
一次聚餐后剩下了n个餐具,此次聚餐共有m个人,问餐具至少被偷走了多少?
每个人都会有一套相同的餐具,即如果某个人有3套餐具,那么所有客人都会有3套餐具。
思路
桶排序。有多少个桶不为空,那么一套餐具就有多少个餐具(cnt)。
找到最多的那个数字x,找到第一个不小于x的可以整除m的数字,这就是餐具套数(MAX)。
MAX∗cnt−nMAX*cnt-nMAX∗cnt−n就是答案。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int n, m, a[MAXN];
int main()
{
scanf("%d%d", &n, &m);
int MAX = 0;
for (int i = 0; i < n; i++)
{
int t; scanf("%d", &t);
a[t]++;
MAX = max(MAX, a[t]);
}
int cnt = 0;
for (int i = 1; i <= 100; i++) cnt += (a[i] != 0);
while (MAX%m != 0) MAX++;
printf("%d\n", cnt*MAX-n);
return 0;
}
/*
5 2
1 2 2 1 3
*/