Submission #1101923

#TimeUsernameProblemLanguageResultExecution timeMemory
1101923MighilonToy (CEOI24_toy)C++17
0 / 100
7 ms2296 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)); 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; }; dbg(pref) auto f=[&](int l,int k,vector<vi>&good)->void{ F0R(i,h){ F0R(j,w){ int ii=i+l-1,jj=j+k-1; if(ii<h&&jj<w&&pref_f(i,j,ii,jj)==0){ good[i][j]++; if(ii<h-1) good[ii+1][j]--; if(jj<w-1) good[i][jj+1]--; if(jj+1<w&&ii+1<h) good[ii+1][jj+1]++; } } } dbg(good); F0R(j,w) FOR(i,1,h) good[i][j]+=good[i-1][j]; F0R(i,h) FOR(j,1,w) good[i][j]+=good[i][j-1]; dbg(good); }; vector<vi> fl(h,vi(w)),fk(h,vi(w)); f(l,1,fl); f(1,k,fk); vector<vi> good(h,vi(w)); F0R(i,h) F0R(j,w) good[i][j]=fl[i][j]&&fk[i][j]; //F0R(i,h){F0R(j,w)cout<<setw(2)<<good[i][j]<<" ";cout<<nl;} if(good[si][sj]==0){ cout<<"NO"<<nl; return; } if(si==fi&&sj==fj){ cout<<"YES"<<nl; return; } //cout<<si<<" "<<sj<<nl; queue<pi> q; q.push({si,sj}); grid[si][sj]=-1; int di[4]={1,-1,0,0}; int dj[4]={0,0,1,-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<h&&vj<w&&vi>=0&&vj>=0&&good[vi][vj]==1&&grid[vi][vj]!=-1){ grid[vi][vj]=-1; q.push({vi,vj}); } } } //F0R(i,h){F0R(j,w)cout<<setw(2)<<grid[i][j]<<" ";cout<<nl;} if(good[fi][fj]!=0&&good[si][sj]!=0&&grid[fi][fj]==-1) 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...