Submission #1197874

#TimeUsernameProblemLanguageResultExecution timeMemory
1197874user736482Toy (CEOI24_toy)C++20
100 / 100
179 ms78064 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000009
#define INF 1000000019
#define POT (1<<20)
#define INFL 1000000000000000099
ll w,h,k,l,a,b,c;
queue<pair<ll,ll>>q;
bool poss[1507][1507],czy[1507][1507],czy2[1507][1507];
ll lw[1507][1507],pw[1507][1507],d[1507][1507],g[1507][1507];
int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>w>>h>>k>>l>>a>>b>>c>>a;
    a=c;
    q.push({a,b});
    for(ll i=0;i<h;i++){
        for(ll j=0;j<w;j++){
            char ch;
            cin>>ch;
            czy2[j][i]=(ch=='*');
            czy[j][i]=!(ch=='X');
        }
    }
    for(ll i=0;i<h;i++)lw[0][i]=czy[0][i];
    for(ll j=1;j<w;j++)for(ll i=0;i<h;i++)lw[j][i]=(lw[j-1][i]+1)*czy[j][i];
    for(ll i=0;i<h;i++)pw[w-1][i]=czy[w-1][i];
    for(ll j=w-2;j>=0;j--)for(ll i=0;i<h;i++)pw[j][i]=(pw[j+1][i]+1)*czy[j][i];
    for(ll i=0;i<w;i++)g[i][0]=czy[i][0];
    for(ll j=1;j<h;j++)for(ll i=0;i<w;i++)g[i][j]=(g[i][j-1]+1)*czy[i][j];
    for(ll i=0;i<w;i++)d[i][h-1]=czy[i][h-1];
    for(ll j=h-2;j>=0;j--)for(ll i=0;i<w;i++)d[i][j]=(d[i][j+1]+1)*czy[i][j];
    while(q.size()){
        auto pom=q.front();
        q.pop();
        if(czy2[pom.ff][pom.ss]){
            cout<<"YES";return 0;
        }
        if(poss[pom.ff][pom.ss])continue;
        poss[pom.ff][pom.ss]=1;
        a=pom.ff;
        b=pom.ss;
        if(a && min(d[a][b],d[a-1][b])+min(g[a][b],g[a-1][b])>l)q.push({a-1,b});
        if(a<w-1 && min(d[a][b],d[a+1][b])+min(g[a][b],g[a+1][b])>l)q.push({a+1,b});
        if(b && min(lw[a][b],lw[a][b-1])+min(pw[a][b],pw[a][b-1])>k)q.push({a,b-1});
        if(b<h-1 && min(lw[a][b],lw[a][b+1])+min(pw[a][b],pw[a][b+1])>k)q.push({a,b+1});
    }
    cout<<"NO";
}
#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...