Submission #1198931

#TimeUsernameProblemLanguageResultExecution timeMemory
1198931rxlfd314화성 (APIO22_mars)C++20
0 / 100
0 ms3192 KiB
#include "mars.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ari2 = array<int, 2>;
using ari3 = array<int, 3>;
using arl2 = array<ll, 2>;
using arl3 = array<ll, 3>;
template <class T> using vt = vector<T>;
#define all(x) begin(x), end(x)
#define size(x) (int((x).size()))
#define REP(a,b,c,d) for(int a=(b);(d)>0?a<=(c):a>=(c);a+=(d))
#define FOR(a,b,c) REP(a,b,c,1)
#define ROF(a,b,c) REP(a,b,c,-1)

struct DSU {
  int N;
  vt<int> uf;
  DSU(const int n) : N(n), uf(n*n, -1) {}
  int hsh(const int i, const int j) {
    return i * N + j;
  }
  int find(const int i, const int j) {
    return uf[hsh(i, j)] < 0 ? hsh(i, j) : uf[hsh(i, j)] = find(uf[hsh(i, j)] / N, uf[hsh(i, j)] % N);
  }
  bool unite(const int a, const int b, const int c, const int d) {
    int i = find(a, b), j = find(c, d);
    if (i == j)
      return false;
    if (uf[i] > uf[j])
      swap(i, j);
    uf[i] += uf[j];
    uf[j] = i;
    return true;
  }
};

string process(vt<vt<string>> a, int i, int j, int k, int n) {
  string ret(100, '0');
  n = 2 * n + 1;
  FOR(x, 0, 2)
    FOR(y, 0, 2) {
      FOR(z, 0, 99) {
        const int c = (x + z / n) * n + y + z % n;
        if (c < 100)
          ret[c] = a[x][y][z];
      }
    }
  if (k == n/2-1) {
    DSU uf(n);
    int cnt = 0;
    FOR(x, 0, n-1)
      FOR(y, 0, n-1)
        cnt += ret[x*n+y] == '1';
    FOR(x, 0, n-1)
      FOR(y, 0, n-1)
        if (ret[x*n+y] == '1') {
          if (x && ret[(x-1)*n+y] == '1')
            cnt -= uf.unite(x-1, y, x, y);
          if (y && ret[x*n+(y-1)] == '1')
            cnt -= uf.unite(x, y-1, x, y);
        }
    ret = string(100, '0');
    FOR(x, 0, 17)
      ret[x] = (cnt >> x & 1) + '0';
  }
  return ret;
}
#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...