直接贪心嘛。先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了。
每个结点在左在右其实都不影响,只和层数有关。现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现次数最多的保持不变。
/********************************************************* * --------------Tyrannosaurus--------- * * author AbyssalFish * **********************************************************/ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxd = 16, LEN = (1<<15)*12 + 10; char s[LEN]; map<ll,int> cnt; //#define LOCAL int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif int T; scanf("%d",&T); while(T--){ scanf("%s",s); char *p = s; int d = 0; cnt.clear(); while(*p){ if(isdigit(*p)){ ll x = *p-‘0‘; while(isdigit(*(++p))) x = x*10+*p-‘0‘; cnt[x<<d]++; if(*p == ‘]‘) d--; if(!*p) break; } else if(*p == ‘[‘) d++; p++; } int sum = 0, M = 0; for(auto pr: cnt){ sum += pr.second; M = max(M,pr.second); } printf("%d\n", sum-M); } return 0; }
时间: 2024-10-26 08:55:04