| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 252878 | Sugardorj | 무지개나라 (APIO17_rainbow) | C++14 | 0 ms | 0 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
long long b[323567],c[323456],a[323][456],tt,d[334564],e[456744];
long long x,m,n,t,k,l;
long long i , j,r,s,y,z;
string p;
queue<pair<long long,long long>> q,qq;
int main(){
    cin >> n>>m>>l>>k>>x>>y>>p;
    tt=1456785678;
    a[x][y]=tt;
    for (i = 0; i<l; i ++){
        if (p[i]=='N')
            x--;
        if (p[i]=='S')
            x++;
        if (p[i]=='W')
            y--;
        if (p[i]=='E')
            y++;
        a[x][y]=tt;
    }
    for (i = 1; i <=k ; i ++){
        cin >> x>>y>>l>>r;
        s=0;
        for (j = x; j<=l; j++){
            for (z = y; z<=r;z++){
                if (a[j][z]>= i){
                    continue;
                }
                s++;
                q=qq;
                q.push({j,z});
                while(q.size()){
                    long long xx=q.front().first;
                    long long yy=q.front().second;
                    q.pop();
                    if (xx+1<=l&&a[xx+1][yy]<i){
                        q.push({xx+1,yy});
                        a[xx+1][yy]=i;    
                    }
                    if (xx-1>=x&&a[xx-1][yy]<i){
                        a[xx-1][yy]=i;    
                        
                        q.push({xx-1,yy});}
                    if (yy+1<=r&&a[xx][yy+1]<i){
                        a[xx][yy+1]=i;    
                        q.push({xx,yy+1});}
                    if (yy-1>=y&&a[xx][yy-1]<i){
                        a[xx][yy-1]=i;    
                        q.push({xx,yy-1});}
                }
            }
        }
        cout <<s<<endl;
    }    
}
