Submission #1363138

#TimeUsernameProblemLanguageResultExecution timeMemory
1363138hccoderMars (APIO22_mars)C++20
0 / 100
0 ms3292 KiB
#include <bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
using namespace std;
using ll = long long;

struct DSU{
    vector<int> par, sz;
    DSU(int n){
        par.resize(n);
        sz.resize(n, 1);
        iota(all(par), 0);
    };
    int find(int x){
        while(x!=par[x]) x = par[x];
        return x;
    }
    void unite(int x, int y){
        x = find(x); y = find(y);
        if (x==y) return;
        if (sz[x]<sz[y]) swap(x, y);
        sz[x] += sz[y];
        par[y] = x;
    }
};

string process(vector<vector<string>> a, int xx, int yy, int k, int n){
    if (n==1){
        DSU dsu(9);
        for (int i = 1; i<3; i++){
            for (int  j = 0; j<3; j++){
                if (a[i][j][0]=='1' && a[i-1][j][0]=='1') dsu.unite(i*3+j, (i-1)*3+j);
            }
        }
        for (int i = 0; i<3; i++){
            for (int  j = 1; j<3; j++){
                if (a[i][j][0]=='1' && a[i][j-1][0]=='1') dsu.unite(i*3+j, i*3+j-1);
            }
        }
        int res = 0;
        set<int> st;
        for (int i = 0; i<3; i++){
            for (int j = 0; j<3; j++){
                if (a[i][j][0]=='1') st.insert(dsu.find(i*3+j));
            }
        }
        res = st.size();
        string ans = string(100, '0');
        for (int i = 0; i<10; i++){
            if (res&(1<<i)) ans[i] = '1';
        }
        return ans;
    }
    else if (n==2){
        if (k==n-1){
            vector<vector<char>> matrix(5, vector<char>(5));
            for (int i = 0; i<3; i++){
                for (int j = 0; j<3; j++){
                    int ind = 0;
                    for (int x = i; x<i+3; x++){
                        for (int y = j; y<j+3; y++){
                            matrix[x][y] = a[i][j][ind];
                            ind++;
                        }
                    }
                }
            }
            DSU dsu(25);
            for (int i = 1; i<5; i++){
                for (int j = 0; j<5; j++){
                    if (matrix[i][j]==1 && matrix[i-1][j]=='1') dsu.unite(i*5+j, (i-1)*5+j);
                }
            }
            for (int i = 0; i<5; i++){
                for (int j = 1; j<5; j++){
                    if (matrix[i][j]==1 && matrix[i][j-1]=='1') dsu.unite(i*5+j, i*5+j-1);
                }
            }
            int res = 0;
            set<int> st;
            for (int i = 0; i<5; i++){
                for (int j = 0; j<5; j++){
                    if (matrix[i][j]=='1') st.insert(dsu.find(i*5+j));
                }
            }
            res = st.size();
            string ans = string(100, '0');
            for (int i = 0; i<10; i++){
                if (res&(1<<i)) ans[i] = '1';
            }
            return ans;
        }
        else {
            string ans;
            for (int i = 0; i<3; i++){
                for (int j = 0; j<3; j++){
                    ans.push_back(a[i][j][0]);
                }
            }
            ans += string(91, '0');
            return ans;
        }
    }
    return string(100, '0');
}   

// int main(){
//     ios::sync_with_stdio(false);
//     cin.tie(0);
// }
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...