#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |