static ulong dfs() { var kb = K.ToBitArray(); var start = -1; for (int i = 63; i >= 0; i--) { if (kb[i]) { start = i; break; } } kb = new BitArray(64); for (int i = start; i >= 0; i--) { var trueNum = Ab.Count(ab => ab[i]); kb[i] = trueNum * 2 <= Ab.Count; if (kb[i] && kb.ToUInt64() > K) { kb[i] = false; } } ulong k = kb.ToUInt64(); ulong sum = 0; foreach (var a in A) { sum += a ^ k; } return(sum); }