classSolution { public: boolsplitArraySameAverage(vector<int>& nums){ int n = nums.size(); int sum = accumulate(nums.begin(), nums.end(), 0); int m = n / 2; unordered_map<int, unordered_set<int>> map;/* cnt,sum */ for (int i = 0; i < (1 << m); i++) { int temp = i; int tsum = 0, tcnt = 0; int idx = 0; while (temp > 0) { if (temp & 1) { tsum += nums[idx]; tcnt++; } idx++; temp >>= 1; } map[tsum].insert(tcnt); } int r = n - m; for (int i = 0; i < (1 << r); i++) { int temp = i; int tsum = 0, tcnt = 0; int idx = 0; while (temp > 0) { if (temp & 1) { tsum += nums[m + idx]; tcnt++; } idx++; temp >>= 1; } for (int j = max(1,tcnt); j < n; j++) { if (j * sum % n != 0) continue; int t = j * sum / n; if (map[t - tsum].count(j - tcnt)) returntrue; } } returnfalse; } };