// Matchsticks to Square #define FOR(i, a, b) for (remove_cv::type>::type i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) class Solution { public: bool makesquare(vector& a) { if (a.empty()) return false; int n = a.size(), s = accumulate(a.begin(), a.end(), 0); vector g(1<>j&1) t += a[j]; if (t == s) g[i] = 1; } REP(i, 1<>j&1) t += a[j]; if (t%s == 0) for (int j = i; ; j = j-1 & i) { if (g[j] && g[i-j]) { g[i] = 1; break; } if (! j) break; } } return g.back(); } return false; } };