제출 #1143044

#제출 시각아이디문제언어결과실행 시간메모리
1143044Noproblem29Furniture (JOI20_furniture)C++20
100 / 100
239 ms10384 KiB
#include<bits/stdc++.h> using namespace std; #ifndef BADGNU #pragma GCC target("sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native") #endif #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ll long long #define int ll #define ld long double #define y1 cheza mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); template<class T> using ordered_set = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>; template<class T> using ordered_multiset = tree<T,null_type,less_equal<T>,rb_tree_tag,tree_order_statistics_node_update>; const int N=1010; const int M=5001; const int B=447; const int mod=998244353; const ll INF=1e18; const int dx[]={1,-1,0,0}; const int dy[]={0,0,1,-1}; const double eps=1e-6; int n,m,q; int mid[N+N]; int dp[N][N]; int tin=0; stack<pair<int,int>>s; void add(int x,int y){ if(dp[x][y]==0){ dp[x][y]=1; --mid[x+y]; s.push({x,y}); } } bool check(int x,int y){ if(dp[x][y])return 1; if(mid[x+y]==1)return 0; add(x,y); while(s.size()){ auto [a,b]=s.top(); s.pop(); if(dp[a-1][b+1]){ add(a-1,b); add(a,b+1); } if(dp[a+1][b-1]){ add(a+1,b); add(a,b-1); } } return 1; } void test(){ cin>>n>>m; memset(dp,1,sizeof(dp)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ mid[i+j]++; dp[i][j]=0; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ // cin>>a[i][j]; char x; cin>>x; if(x=='1'){ check(i,j); } } } cin>>q; for(int x,y;q--;){ cin>>x>>y; cout<<check(x,y)<<'\n'; } } /* */ signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr); int t2=1; // cin>>t2; for(int i=1;i<=t2;i++){ test(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...