提交时间:2024-04-23 22:39:02

运行 ID: 46083

#include<bits/stdc++.h> using namespace std; int a[10000001]; int main(){ int n, t, sum, ans; cin >> n; for(int i = 1; i <= n; i++){ cin >> t; if(a[t] == 0){ sum++;//记录数字的种类数量 } a[t]++;//存储数字t的个数 } int l = 0, r = 10000000; while(a[l] == 0){ l++; }//找最小值位置 while(a[r] == 0){ r--; }//找最大值位置 //只要sum > 2,就直接消除最大值/最小值(数量少的被消除) while(sum > 2){ if(a[l] < a[r]){//消除最大值(最大值的量比最小值少) t = a[l]; a[l] = 0; a[r] -= t; ans += 2 * t; sum--; while(a[l] == 0){ l++; } }else if(a[l] > a[r]){//消除最小值(最小值的量比最大值少) t = a[r]; a[r] = 0; a[l] -= t; ans += 2 * t; sum--; while(a[r] == 0){ r--; } }else{//如果一样多,就一起消除 t = a[l]; a[l] = a[r] = 0; ans += 2 * t; while(a[l] == 0){ l++; } sum--; if(sum == 2){//特判:当sum等于2的时候,也就是说sum消除后只剩两个不同的数了,就立刻停止等待输出 ans -= 1; break; } while(a[r] == 0){ r--; } sum--; } } printf("%d %d %d", ans - 1, l, r);//输出 return 0; }