题意是给出一些数,问最少改变多少数字可以使它们出现频率相等。
那么只统计超过平均数的那些,多出来的,肯定是需要被改变的。
#include<stdio.h> #include<iostream> #include<math.h> #include<string.h> #include<iomanip> #include<stdlib.h> #include<ctype.h> #include<algorithm> #include<deque> #include<functional> #include<iterator> #include<vector> #include<list> #include<map> #include<queue> #include<set> #include<stack> #include<sstream> #define CPY(A,B)memcpy(A,B,sizeof(A)) typedef long long LL; typedef unsigned long long uLL; const int MOD=1e9+7; const int INF=0x3f3f3f3f; const LL INFF=0x3f3f3f3f3f3f3f3fLL; const double EPS=1e-9; const double OO=1e20; const double PI=acos (-1.0); int dx[]= {0,1,0,-1}; int dy[]= {1,0,-1,0}; int gcd (const LL &a,const LL &b) {return b==0?a:gcd (b,a%b);} using namespace std; int col[110]; int main() { int n,k; memset (col,0,sizeof col); scanf ("%d%d",&n,&k); for (int i=1; i<=n; ++i) { int t; scanf ("%d",&t); col[t]++; } int m=n/k,ans=0; for (int i=1; i<=k; ++i) { if (col[i]<m) { continue; } else {ans+= (col[i]-m);} } printf ("%d\n",ans); return 0; }