Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
46084 zhouhuanyu 玙静 数字游戏 C++ 运行出错 16 MS 39308 KB 1282 2024-04-23 22:47:17

Tests(0/1):


#include<bits/stdc++.h> using namespace std; int a[10000001]; int main(){ int n, t, sum, ans, lsum, rsum; cin >> n; for(int i = 1; i <= n; i++){ cin >> t; if(a[t] == 0){// sum 统计不同数字数量 sum++; } a[t]++;//保存t的数值 } int l = 0, r = 10000000; while(a[l] == 0){ l++; //找到最小值的位置 } while(a[r] == 0){ r--; //遭到最大值的位置 } while(sum > 2){ //只要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个不同的数了,就不能消右边,直接得出结果 ans -= 1; break; } while(a[r] == 0){ r--; } sum--; } } printf("%d %d %d", ans, l, r);//输出 return 0; }


测评信息: