CodeForces 723C Polycarp at the Radio (贪心+暴力)

来源:互联网 发布:linux exec用法 编辑:程序博客网 时间:2024/05/01 18:13
题意:给定 n 个数,让把某一些变成 1-m之间的数,要改变最少,使得1-m中每个数中出现次数最少的尽量大。

虽然这个贪心挺好想到的,但是却不是那么容易敲出来。。。
看别人的代码,真好。。

int a[N];int cnt[N];int main(){    int n,m;    sf("%d%d",&n,&m);    int ans1=n/m,ans2=0;    rep(i,1,n){        sf("%d",&a[i]);        if(a[i]<=m){            cnt[a[i]]++;        }    }    for(int i=1;i<=n;++i){        if(a[i]>m||a[i]<=m&&cnt[a[i]]>ans1){            for(int j=1;j<=m;++j){                if(cnt[j]<ans1){                    if(a[i]<=m){                        cnt[a[i]]--;                    }                    a[i]=j;                    cnt[j]++;                    ans2++;break;                }            }        }    }    pf("%d %d\n",ans1,ans2);    rep(i,1,n){        pf("%d%c",a[i],i==n?'\n':' ');    }}
阅读全文
0 0
原创粉丝点击