Description
在某人参加的某一场比赛中,一共有k位选手参赛,他们的编号是1到k。主办方准备了n个气球,主办方同样把这n个气球随机的编号为1到k中的一个数(保证n可以整除k),然后比赛胜利的规则就是,主办方随机的选择一个气球,如果这个气球的编号是X,那么X选手就胜出...,这样真的好么(^),主办方为了体现自己的,暗室不欺 不同流俗 不欺暗室 不忘沟壑 赤子之心 德厚流光 高情远致 高山景行 功德无量 厚德载物 怀瑾握瑜 蕙心纨质 见危授命 鞠躬尽瘁,死而后已 精金良玉 敬老慈幼 良金美玉 明德惟馨 年高德劭 前人栽树,后人乘凉 青天白日 山高水长 拾金不昧 玉洁松贞 沅茝沣兰 云中白鹤 志士仁人等高尚的品德.决定重新编号,使得每个人获胜的概率是一样哒~~,所以这位高尚的主办方想知道最少得修改几次哦!!!
Input
多组测试,请处理到文件末尾,输入的格式是,第一行是n,k(k<n<=100)接下来n个数,表示气球的编号。
Output
一个数,表示需要修改的次数。
Sample Input
4 2 2 1 2 2 6 2 2 2 1 1 1 2
Sample Output
1 0
HINT
样例解释:1 由 2 1 2 2 --->1 1 2 2
思路:我们知道了气球编号是1-k,每一个气球的编号数量应该是相同的。n/k是平均值,是必须每个编号都达到的数量。如果该编号气球的数量少于平均值,那我们就加上那个差值,至于比平均值大的我们就可以不用管了。因为其实该编号气球少于平均值的我们加上差值之后就相当于比平均值大的减去了
注意输入的时候 i从0开始到n-1,若1开始则报错
#include<vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<algorithm>
#include<stdlib.h>
using namespace std;
typedef long long ll;
const int maxn=10001;
const int mod=998244353;
const int inf=0x3f3f3f3f;
int main()
{
int i,n,m,t,flag;
int a[maxn] ;
while(~scanf("%d%d",&n,&m)){
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
scanf("%d",&t);
a[t]++;
}
flag=0;
for(int i=1;i<=m;i++){
if(a[i]<(n/m))
flag+=n/m-a[i];
}
printf("%d\n",flag);
}
return 0;
}
网友评论