제출 #946284

#제출 시각아이디문제언어결과실행 시간메모리
946284efedmrlrFurniture (JOI20_furniture)C++17
100 / 100
196 ms16036 KiB
// #pragma GCC optimize("O3,Ofast,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define lli long long int #define MP make_pair #define pb push_back #define REP(i,n) for(int i = 0; (i) < (n); (i)++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() void fastio() { ios_base::sync_with_stdio(false); cin.tie(NULL); } const double EPS = 0.00001; const int INF = 1e9+500; const int N = 1005; const int ALPH = 26; const int LGN = 25; constexpr int MOD = 1e9+7; int n,m,q; vector<int> diag; vector<vector<int> > r; void dfsf(int x, int y) { if(x > n || y > m) return; if(r[x][y]) return; if(r[x][y - 1] && r[x - 1][y]) { r[x][y] = 1; diag[x + y] += 1; dfsf(x + 1, y); dfsf(x, y + 1); } } void dfsb(int x, int y) { // cout << "x:" << x << " y:" << y << "\n"; if(x < 1 || y < 1) return; if(r[x][y]) return; if(r[x + 1][y] && r[x][y + 1]) { r[x][y] = 1; diag[x + y] += 1; dfsb(x - 1, y); dfsb(x, y - 1); } } void blck(int x, int y) { r[x][y] = 1; diag[x + y] += 1; dfsf(x + 1, y); dfsf(x, y + 1); dfsb(x - 1, y); dfsb(x, y - 1); } inline void solve() { cin>>n>>m; r.assign(n + 5, vector<int>(m + 5, 0)); diag.assign(n + m + 3, 0); for(int i = 0; i <= n; i++) { r[i][0] = r[i][m + 1] = 1; } for(int i = 0; i <= m; i++) { r[0][i] = r[n + 1][i] = 1; } for(int i = 1; i<=n; i++) { for(int j = 1; j <= m; j++) { int tmp; cin >> tmp; if(tmp) { if(r[i][j] == 1) continue; blck(i, j); } } } cin >> q; for(int z = 1; z<=q; z++) { // for(int i = 1; i <=n; i++) { // for(int j = 1; j <= m; j ++) { // cout << r[i][j] << " "; // } // cout << "\n"; // } int x,y; cin >> x >> y; if(r[x][y]) { cout << "1\n"; continue; } int sum = x + y; // cout << "cnt:" << (min(n, sum - 1) - max(1, sum - m) + 1) << "\n"; // cout << diag[sum] << "\n"; if((min(n, sum - 1) - max(1, sum - m) + 1) - diag[sum] > 1) { cout << "1\n"; blck(x, y); } else { cout << "0\n"; } } } signed main() { fastio(); int test = 1; //cin>>test; while(test--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...