Submission #1102191

#TimeUsernameProblemLanguageResultExecution timeMemory
1102191MighilonToy (CEOI24_toy)C++17
0 / 100
9 ms2556 KiB
#include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "../Library/debug.h" #else #define dbg(x...) #endif typedef long long ll; typedef long double ld; typedef pair<int, int> pi; typedef pair<ll, ll> pl; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define F0R(i, a) for (int i = 0; i < (a); ++i) #define FORd(i, a, b) for (int i = (b) - 1; i >= (a); --i) #define F0Rd(i, a) for (int i = (a) - 1; i >= 0; --i) #define trav(a, x) for (auto& a : x) #define f first #define s second #define pb push_back #define sz(x) (int)(x).size() #define all(x) x.begin(), x.end() const char nl = '\n'; const int INF = 1e9; const int MOD = 1e9 + 7; void solve(){ int w,h,k,l; cin>>w>>h>>k>>l; vi s(4);F0R(i,4)cin>>s[i]; int fi=0,fj=0,si=s[1],sj=s[2]; vector<vi> grid(h,vi(w)), pref(h,vi(w)), good(h,vi(w)); F0R(i,h){ F0R(j,w){ char c; cin>>c; if(c=='*') fi=i,fj=j; else if(c=='X') grid[i][j]=1; } } F0R(i,h){ F0R(j,w){ if(i&&j) pref[i][j]=pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1]+grid[i][j]; else if(i) pref[i][j]=pref[i-1][j]+grid[i][j]; else if(j) pref[i][j]=pref[i][j-1]+grid[i][j]; } } auto pref_f=[&](int i, int j, int ii, int jj)->int{ int res=0; res=pref[ii][jj]; if(i&&j) res+=pref[i-1][j-1]; if(i) res-=pref[i-1][jj]; if(j) res-=pref[ii][j-1]; return res; }; int di[4]={1,-1,0,0}; int dj[4]={0,0,1,-1}; auto bfs=[&](int si,int sj,int l,int k,vector<vi>&a)->void{ queue<pi> q; q.push({si,sj}); vector<vb> vis(h,vb(w)); vis[si][sj]=1; while(!q.empty()){ auto [i,j]=q.front(); q.pop(); F0R(d,4){ int vi=i+di[d],vj=j+dj[d]; if(vi>=0&&vj>=0&&vi<h&&vj<w&& vi+l-1<h&&vj+k-1<w&& pref_f(vi,vj,vi+l-1,vj+k-1)==0&&vis[vi][vj]==0){ q.push({vi,vj}); vis[vi][vj]=1; } } } dbg(vis) F0R(i,h){ F0R(j,w){ if(vis[i][j]){ int ii=i+l-1,jj=j+k-1; a[i][j]++; if(ii+1<h) a[ii+1][j]--; if(jj+1<w) a[i][jj+1]--; if(jj+1<w&&ii+1<h) a[ii+1][jj+1]++; } } } F0R(j,w) FOR(i,1,h) a[i][j]+=a[i-1][j]; F0R(i,h) FOR(j,1,w) a[i][j]+=a[i][j-1]; dbg(1) }; vector<vi> gridl(h,vi(w)),gridk(h,vi(w)); bfs(s[1],s[0],1,k,gridk); bfs(s[3],s[2],l,1,gridl); dbg(gridl) dbg(gridk) F0R(i,h){ F0R(j,w){ if(gridl[i][j]&&gridk[i][j]) good[i][j]=1; } } if(good[fi][fj]!=0&&good[si][sj]!=0) cout<<"YES"<<nl; else cout<<"NO"<<nl; } int32_t main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int TC = 1; // cin >> TC; while(TC--){ solve(); } return 0; }
#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...