classSolution { public: intsumFourDivisors(vector<int>& nums){ int res = 0; for (auto x : nums) { int cnt = 0, sum = 0; for (int i = 1; i*i <= x; ++i) { if (i*i == x) { cnt++; break; } if (x%i == 0) { cnt += 2; sum += i + x/i; } if (cnt > 4) break; } if (cnt == 4) res += sum; } return res; } };
classSolution { public: intlink(int a, int b, int d){ if (d == 1 || d == 3) { d--; swap(a, b); } if (d == 0) return (a==1||a==4||a==6)&&(b==1||b==3||b==5); if (d == 2) return (a==2||a==3||a==4)&&(b==2||b==5||b==6); returnfalse; }
boolhasValidPath(vector<vector<int>>& grid){ int n = grid.size(), m = grid[0].size(); int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; vector<vector<int>> vis(n, vector<int>(m, 0)); queue<pair<int, int>> Q; Q.push({0, 0}); vis[0][0] = 1; while (!Q.empty()) { pair<int, int> p = Q.front(); Q.pop(); int x = p.first, y = p.second; if (x == n-1 && y == m-1) returntrue; for (int i = 0; i < 4; ++i) { int nx = x + dx[i], ny = y + dy[i]; if (0 <= nx && nx < n && 0 <= ny && ny < m && !vis[nx][ny] && link(grid[x][y], grid[nx][ny], i)) { vis[nx][ny] = 1; Q.push({nx, ny}); } } } returnfalse; } };