Submission #1225179

#TimeUsernameProblemLanguageResultExecution timeMemory
1225179SpyrosAlivMars (APIO22_mars)C++20
0 / 100
0 ms2856 KiB
#include <bits/stdc++.h>
using namespace std;

vector<pair<int, int>> delta = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
vector<vector<bool>> vis;
int N;

bool inside(int i, int j) {
    return i >= 0 && i < N && j >= 0 && j < N;
}

void dfs(int i, int j, vector<vector<char>> &grid) {
    if (!inside(i, j) || vis[i][j] || grid[i][j] == '0') return;
    vis[i][j] = true;
    for (auto [pi, pj]: delta) dfs(i + pi, j + pj, grid);
}

int get_comps(vector<vector<char>> grid) {
    N = grid.size();
    vis.assign(N, vector<bool>(N, false));
    int ans = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (vis[i][j] || grid[i][j] == '0') continue;
            ans++;
            dfs(i, j, grid);
        }
    }
    return ans;
}

string process(vector<vector<string>> a, int i, int j, int k, int n) {
    int m = 2 * (n - k - 1);
    if (i != m && j != m) return a[0][0];
    if (i == m && j != m) {
        // construct column
        string fin = "";
        fin += a[0][0][0];
        fin += a[1][0][0];
        fin += a[2][1];
        while (fin.size() > 100) fin.pop_back();
        return fin;
    }
    else if (j == m && i != m) {
        // construct row;
        string fin = "";
        fin += a[0][0][0];
        fin += a[0][1][0];
        fin += a[0][2];
        while (fin.size() > 100) fin.pop_back();
        return fin;
    }
    else if (i == m && j == m) { // construct the grid
        int sz = (2*n+1) - i;
        vector<vector<char>> grid(sz, vector<char>(sz));
        for (int r = 0; r < 2; r++) {
            for (int c = 0; c < 2; c++) {
                grid[r][c] = a[r][c][0];
            }
        }
        for (int r = 3; r < sz; r++) {
            grid[0][r] = a[2][0][r - 3];
            grid[1][r] = a[2][1][r - 3];
        }
        for (int c = 3; c < sz; c++) {
            grid[c][0] = a[0][2][c-3];
            grid[c][1] = a[1][2][c-3];
        }
        int sz2 = (2*n+1) - i - 2;
        vector<vector<char>> otherGrid(sz2, vector<char>(sz2));
        for (int r = 0; r < sz2; r++) {
            for (int c = 0; c < sz2; c++) {
                otherGrid[r][c] = a[2][2][sz2 * r + c];
            }
        }
        for (int r = 3; r < sz; r++) {
            for (int c = 3; c < sz; c++) {
                grid[r][c] = otherGrid[r - 3][c - 3];
            }
        }
        if (k == n-1) {
            int x = get_comps(grid);
            string ans = "";
            for (int b = 0; b < 100; b++) {
                if ((x >> b) & 1) ans += '1';
                else ans += '0';
            }
            return ans;
        }
        else {
            string ret = "";
            for (int r = 0; r < sz; r++) {
                for (int c = 0; c < sz; c++) {
                    ret += grid[r][c];
                }
            }
            while (ret.size() < 100) ret += '0';
            return ret;
        }
    }
}

Compilation message (stderr)

mars.cpp: In function 'std::string process(std::vector<std::vector<std::__cxx11::basic_string<char> > >, int, int, int, int)':
mars.cpp:101:1: warning: control reaches end of non-void function [-Wreturn-type]
  101 | }
      | ^
#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...