3
bool makesquare(vector<int> &matchsticks) {4
int goal = 0, totalSum = 0;5
for (int i : matchsticks) {9
sort(matchsticks.begin(), matchsticks.end(),10
[](auto left, auto right) { return left > right; });15
return backtrack(0, b, 0, goal, 4, matchsticks);18
bool backtrack(int start, int &b, int sum, int &goal, int groups, vector<int> &matchsticks) {20
// set sum to 0, groups--21
return backtrack(0, b, 0, goal, groups - 1, matchsticks);26
for (int i = start; i < matchsticks.size(); i++) {27
if ((i > 0) && (!(b & (1 << (i - 1)))) && (matchsticks[i] == matchsticks[i - 1])) {30
// if element not used and element value doesnt go over group sum31
if (((b & (1 << i)) == 0) && (sum + matchsticks[i] <= goal)) {32
// set element to used, recursion34
if (backtrack(i + 1, b, sum + matchsticks[i], goal, groups, matchsticks)) {37
// if here, received a false, set element to unused again