답안 #1102191

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1102191 2024-10-17T15:58:30 Z Mighilon Toy (CEOI24_toy) C++17
0 / 100
9 ms 2556 KB
#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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 464 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Incorrect 1 ms 336 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 464 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Incorrect 1 ms 336 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 8 ms 2556 KB Output is correct
5 Correct 8 ms 2384 KB Output is correct
6 Correct 2 ms 592 KB Output is correct
7 Correct 9 ms 2420 KB Output is correct
8 Correct 9 ms 2384 KB Output is correct
9 Correct 2 ms 1120 KB Output is correct
10 Correct 5 ms 2384 KB Output is correct
11 Correct 4 ms 2384 KB Output is correct
12 Correct 2 ms 984 KB Output is correct
13 Correct 4 ms 2552 KB Output is correct
14 Correct 4 ms 2156 KB Output is correct
15 Incorrect 8 ms 2128 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 464 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Incorrect 1 ms 336 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 464 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Incorrect 1 ms 336 KB Output isn't correct
16 Halted 0 ms 0 KB -