题目链接:http://codeforces.com/contest/723/problem/C
题意:给定长度为n的一个序列。还有一个m。现在可以改变序列的一些数。使得序列里面数字[1,m]出现次数最小的次数尽可能大。输出出现次数最小的次数。需要改变序列多少次。改变后的序列。
思路:题意有点难懂。可以发现出现次数最小的次数最大一定是(n/m).所以枚举数字[1,m]如果数字i(1<=i<=m)出现次数小于n/m,则要把序列某个数替换成i,怎么选择用哪些数来替换。应该选序列值大于m的或者序列值在[1,m]范围但是出现次数大于cnt的来替换。 注意题目没有要求一定要把大于m的数都变成[1,m]。
比如数据
4 3
1 2 3 4
输出结果是
1 0
1 2 3 4
因为不管把4替换成[1,3]的哪个都不会使出现次数最小变大。
#define _CRT_SECURE_NO_DEPRECATE#include #include #include #include #include #include #include #include