Submission #1208661

#TimeUsernameProblemLanguageResultExecution timeMemory
1208661k1r1t0Mars (APIO22_mars)C++20
36 / 100
105 ms4080 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; string process(vector<vector<string>> a, int i, int j, int k, int n) { const int S = 100; int lp = 2 * (n - k - 1); if (i < lp - 1 && j < lp - 1) return a[0][0]; vector<vector<char>> b(2 * n + 1, vector<char>(2 * n + 1)); if (lp != 0) { if (i >= lp - 1 && j >= lp - 1) { string cur = a[0][0]; string right = a[0][2]; string down = a[2][0]; string corner = a[2][2]; b[i][j] = cur[0]; for (int t = j + 2; t <= 2 * n; t += 2) b[i][t] = right[(t - j) / 2 - 1]; for (int t = i + 2; t <= 2 * n; t += 2) b[t][j] = down[(t - i) / 2 - 1]; int ti = i + 2, tj = j + 2; for (char c : corner) { b[ti][tj] = c; tj += 2; if (tj > 2 * n) { tj = j + 2; ti += 2; if (ti > 2 * n) break; } } string res; for (int ti = i; ti <= 2 * n; ti += 2) for (int tj = j; tj <= 2 * n; tj += 2) res.push_back(b[ti][tj]); //assert((int) res.size() <= S); while ((int) res.size() < S) res.push_back('0'); return res; } if (i < lp - 1) { string cur = a[0][0]; string right = a[0][2]; for (int i = S - 1; i > 0; i--) right[i] = right[i - 1]; right[0] = cur[0]; return right; } string cur = a[0][0]; string down = a[2][0]; for (int i = S - 1; i > 0; i--) down[i] = down[i - 1]; down[0] = cur[0]; return down; } b[i][j] = a[0][0][0]; for (int d = 1; d <= 2; d++) { for (int t = j + d; t <= 2 * n; t += 2) b[i][t] = a[0][d][(t - j - d) / 2]; for (int t = i + d; t <= 2 * n; t += 2) b[t][j] = a[d][0][(t - i - d) / 2]; } for (int di = 1; di <= 2; di++) for (int dj = 1; dj <= 2; dj++) { int ti = i + di, tj = j + dj; for (char c : a[di][dj]) { b[ti][tj] = c; tj += 2; if (tj > 2 * n) { tj = j + dj; ti += 2; if (ti > 2 * n) break; } } } vector<vector<bool>> used(2 * n + 1, vector<bool>(2 * n + 1, false)); function<void(int, int)> dfs = [&](int ti, int tj) { if (used[ti][tj]) return; used[ti][tj] = true; for (int di = -1; di <= 1; di++) for (int dj = -1; dj <= 1; dj++) { if (abs(di) + abs(dj) != 1) continue; int ni = ti + di; int nj = tj + dj; if (ni < 0 || ni > 2 * n || nj < 0 || nj > 2 * n || used[ni][nj] || b[ni][nj] == '0') continue; dfs(ni, nj); } }; int ans = 0; for (int i = 0; i <= 2 * n; i++) for (int j = 0; j <= 2 * n; j++) if (!used[i][j] && b[i][j] == '1') { ans++; dfs(i, j); } string res; while (ans > 0) { res.push_back(ans % 2 + '0'); ans /= 2; } while ((int) res.size() < S) res.push_back('0'); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...