题目描述
体育课上,老师要对n名同学进行若干次长跑训练,同学们的长跑水平各不相同,我们以ai记录(从1到k),1级表示速度最慢,k级表示速度最快;
每次训练,所有同学都必须参加,但是水平相同的多名同学中只能有1名同学提高1个等级(已经训练到k等级的同学就不会提升了),每次训练花费1单位经费。
编程计算,要把所有的同学的长跑水平都提升到k等级,至少需要花费多少经费。
输入格式
输入文件: train.in
第一行为两个正整数n和k,第二行为n个正整数ai,分别表示每个同学的初始水平。
输出格式
输出文件: train.out
输出最少的花费
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000010;
int a[MAXN];
int num;
int main() {
freopen("train.in", "r", stdin);
freopen("train.out", "w", stdout);
int n, k;
cin >> n >> k;
for (int i = 1; i <=n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
while(1){
for(int i=1;i<=n;i++){
if(a[i]==k){
break;
}
if(a[i]!=a[i+1]){
a[i]++;
}
}
num++;
if(a[1]==k) break;
}
cout<<num;
return 0;
}