1 //AC代码。。。表示很晕 2 #include <iostream> 3 using namespace std; 4 int a[2005],b[2005]; 5 int main() 6 { 7 int n,m,cnt; 8 cin >> n >> m; 9 int t = n/m; 10 int t2 = n%m; 11 if(n%m == 0) cnt = t; 12 else cnt = t+1; 13 for(int i=0; i<n; ++i) 14 { 15 cin >> a[i]; 16 if(a[i] <= m) ++b[a[i]]; 17 if(a[i] <= m && t2 > 0 && b[a[i]] == cnt) --t2; 18 } 19 int f = 1; 20 int ans = 0; 21 if(t2 == 0) cnt = t; 22 //cout << cnt << endl; 23 for(int i=0; i<n; ++i) 24 { 25 if(a[i] > m ||(a[i] <=m && b[a[i]] > cnt)) 26 { 27 while(f <= m) 28 { 29 //cout <<"test" << f << " " << cnt << endl; 30 if(b[f] < t) break; 31 ++f; 32 } 33 if(f <= m) 34 { 35 ++ans; 36 if(a[i] <= m) 37 --b[a[i]]; 38 a[i] = f; 39 ++b[f]; 40 //cout <<t2 << "bf " << b[f] <<" " << cnt << endl; 41 if(t2 > 0 && b[f] == cnt ) 42 if((--t2) == 0) cnt = t; 43 if(a[i] <= m && t2 > 0 && b[a[i]] == cnt) 44 if((--t2) == 0) cnt = t; 45 } 46 } 47 } 48 cout << t << " " << ans << endl; 49 for(int i=0; i<n; ++i) 50 if(i == 0) 51 cout << a[i]; 52 else 53 cout << " " << a[i]; 54 cout << endl; 55 return 0; 56 }
时间: 2024-11-25 05:25:58