#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
#define M 2016
using namespace std;
const int inf=1<<20;
int a[M],b[M];//b[j] the num of songs the groups j plays
map<int,int> num;
int main()
{
int n,m;
cin>>n>>m;
//要让1~m的人played
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<=m)
{
num[a[i]]++;
}
}
int cur=1;
int ans=n/m;//n首歌分给m个人最小值要最大->平均分
int cnt=0;//最小修改次数 若都1~m的次数都达到ans则不用修改
// 4 3
//1 2 3 4
for(int i=1;i<=n;i++)
{
if(a[i]>m||num[a[i]]>ans)
{
while(cur<=m&&num[cur]>=ans)//跳过已经达到ans的数字
{
cur++;
}
if(cur<=m)//还有数字没达到ans时要修改
{
cnt++;
num[a[i]]--;
a[i]=cur;
num[cur]++;
}
}
}
cout<<ans<<" "<<cnt<<endl;
for(int i=1;i<=n;i++)
{
cout<<a[i];
if(i==n)
cout<<endl;
else
cout<<" ";
}
return 0;
}
Codeforces 723C暴力(最小值最大)
最新推荐文章于 2019-08-24 20:41:51 发布