int res = 0; int len = s.size(); do { bool can = true; for (int i = 0; i + k - 1 < len; i++) { if (check(i, i + k - 1)) { can = false; break; } } if (can) res++; } while (next_permutation(s.begin(), s.end())); // 备注:next_permutation 在用的时候会自动去重
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; structNode { int x, y, t; booloperator<(const Node& a) const { return t > a.t; } }; priority_queue<Node> Q; constint N = 1010; int H, W, Y; int A[N][N]; bool st[N][N]; int res[100010];
voidsolve(){ // 读入数据 cin >> H >> W >> Y; for (int i = 1; i <= H; i++) for (int j = 1; j <= W; j++) cin >> A[i][j];
// 把边缘的格子加入小根堆 for (int i = 1; i <= H; i++) for (int j = 1; j <= W; j++) if (i == 1 || j == 1 || i == H || j == W) { st[i][j] = true; Q.push((Node){i, j, A[i][j]}); }
int T = 0; while (Q.size()) { // 拿出当前最低的格子 Node now = Q.top(); Q.pop(); int x = now.x, y = now.y, t = now.t; T = max(T, t); res[T]++; // T 高度被淹的格子数量+1
// 看一下这个格子周围的四个方向 for (int i = 0; i < 4; i++) { int a = x + dx[i], b = y + dy[i]; // 越界 if (a < 1 || a > H || b < 1 || b > W) continue; // 已经在队列中 if (st[a][b]) continue;
// 计算前缀和(已知i时刻淹了的格子数量,就知道0~i时刻总共被淹的格子数量) for (int i = 1; i <= Y; i++) res[i] += res[i - 1]; // 输出结果 for (int i = 1; i <= Y; i++) cout << H * W - res[i] << endl; }
string dfs(LL n){ string s = to_string(n); string s_rev = s; reverse(s_rev.begin(), s_rev.end()); int len = s.size(); bool zero_flag = false;
// 遍历看中间有没有 0 出现(因为我们想要的数中不能有0) for (int i = 0; i < len; i++) if (s[i] == '0') zero_flag = true;
// 如果没有 0 出现,并且是回文,直接返回 if (!zero_flag && s == s_rev) return s; for (int i = 2, l = sqrt(n); i <= l; i++) { if (n % i == 0) { bool flag = true; int t = i, j = 0; // 看看t里面是否有0(因为我们想要的数中不能有0) while (t) { if (t % 10 == 0) flag = false; t /= 10; } t = i; // 中间出现 0 了,直接跳过 if (!flag) continue; // 算出计算和 i 对称的数 j while (t) j = j * 10 + t % 10, t /= 10; // 如果找到了这一对对称的数,就继续往下面搜 if ((n / i) % j == 0) { string ret = dfs(n / i / j); // 如果得到的结果不是空串 if (ret != "") returnto_string(i) + "*" + ret + "*" + to_string(j); } } } return""; }
voidsolve(){ cin >> N; string ret = dfs(N); if (ret != "") cout << ret << endl; else cout << -1 << endl; }