Submission #992614

#TimeUsernameProblemLanguageResultExecution timeMemory
992614vyshniak_nFurniture (JOI20_furniture)C++17
0 / 100
269 ms524288 KiB
//#pragma optimize("Ofast") //#pragma optimize("unroll-loops") //#pragma traget("avx,avx2") #include <iostream> #include <cmath> #include <algorithm> #include <stdio.h> #include <cstdint> #include <cstring> #include <string> #include <cstdlib> #include <vector> #include <bitset> #include <map> #include <queue> #include <ctime> #include <stack> #include <set> #include <list> #include <random> #include <deque> #include <functional> #include <iomanip> #include <sstream> #include <fstream> #include <complex> #include <numeric> #include <cassert> #include <array> #include <tuple> #include <unordered_map> #include <unordered_set> #include <thread> typedef long long ll; typedef unsigned long long ull; typedef long double ld; #define el '\n' #define ff first #define ss second #define pb push_back #define pf push_front #define popb pop_back #define popf pop_front #define point pair <ll, ll> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() using namespace std; #include <random> mt19937 rnd(time(0)); const ll INF = 1e18 + 10; const ll inf = 1e9 + 10; const ll N = 1e6 + 10; const ll mod = 1e9 + 7; const ll K = 7e6 + 100; const ll LOG = 20; ll parent[N], sz[N]; bool have[N][2]; ll dx[8] = {1, 1, 1, -1, -1, -1, 0, 0}; ll dy[8] = {0, 1, -1, 0, 1, -1, 1, -1}; ll a[1010][1010]; void build(ll n) { for (ll i = 1; i <= n; i++) parent[i] = i, sz[i] = 1, have[i][0] = have[i][1] = 0; } ll lead(ll v) { if (parent[v] == v) return v; return parent[v] = lead(v); } void union_sets(ll a, ll b) { a = lead(a); b = lead(b); if (a != b) { if (sz[a] < sz[b]) swap(a, b); parent[b] = a; sz[a] += sz[b]; have[a][0] |= have[b][0]; have[a][1] |= have[b][1]; } } void solve() { ll n, m; cin >> n >> m; for (ll i = 1; i <= n; i++) for (ll j = 1; j <= m; j++) cin >> a[i][j]; build(n * m); auto pos = [&](ll x, ll y) -> ll { return (x - 1) * m + y; }; for (ll i = 1; i <= n; i++) have[pos(i, 1)][0] = have[pos(i, m)][1] = 1; for (ll i = 1; i <= m; i++) have[pos(1, i)][1] = have[pos(n, i)][0] = 1; ll q; cin >> q; while (q--) { ll x, y; cin >> x >> y; bool now[2] = {have[pos(x, y)][0], have[pos(x, y)][1]}; for (ll i = 0; i < 8; i++) { if (x + dx[i] < 1 || x + dx[i] > n || y + dy[i] < 1 || y + dy[i] > m) continue; if (a[x + dx[i]][y + dy[i]] == 0) continue; ll cur = pos(x + dx[i], y + dy[i]); cur = lead(cur); now[0] |= have[cur][0]; now[1] |= have[cur][1]; } if (now[0] && now[1]) { cout << 0 << el; continue; } cout << 1 << el; a[x][y] = 1; for (ll i = 0; i < 8; i++) { if (x + dx[i] < 1 || x + dx[i] > n || y + dy[i] < 1 || y + dy[i] > m) continue; union_sets(pos(x, y), pos(x + dx[i], y + dy[i])); } } return; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tests = 1; //cin >> tests; while (tests--) solve(); return 0; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...