제출 #1345459

#제출 시각아이디문제언어결과실행 시간메모리
1345459vtnooMaze (JOI23_ho_t3)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
#define all(x) x.begin(),x.end()
#define sz(a) ((int)a.size())
#define pb push_back
using namespace std;
typedef long long ll;

const int N=3000,INF=1e9;
const int di[]={1,-1,0,0};
const int dj[]={0,0,1,-1};

vector<string>A;

void chmin(int &a,int b){
    a=min(a,b);
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
    int r,c,n;cin>>r>>c>>n;
    int sr,sc,gr,gc;cin>>sr>>sc>>gr>>gc;
    sr--,sc--,gr--,gc--;
    A.resize(r);
    L(i,0,r-1){
        cin>>A[i];
    }
    auto safe=[&](int x,int y)->bool{
        return x>=0&&x<r&&y>=0&&y<c;
    };
    vector<vector<int>>dist(r,vector<int>(c,INF));
    deque<pair<int,int>>q;
    q.pb({sr,sc});
    dist[sr][sc]=0;
    vector<set<int>>rem(r);
    L(i,0,r-1)L(j,0,c-1)rem[i].insert(j);
    rem[sr].erase(sc);
    while(sz(q)){
        auto [i,j]=q.front();q.pop_front();
        if(dist[gr][gc]!=INF)break;
        //primer caso
        L(k,0,3){
            int ni=i+di[k],nj=j+dj[k];
            if(safe(ni,nj)&&A[ni][nj]!='#'){
                if(dist[ni][nj]>dist[i][j]){
                    dist[ni][nj]=dist[i][j];
                    rem[ni].erase(nj);
                    q.push_front({ni,nj});
                }
            }
        }
        //segundo caso 
        int l1=max(0,i-n),r1=min(r-1,i+n);
        int l2=max(0,j-n),r2=min(c-1,j+n);
        L(ni,l1,r1){ 
            auto it=rem[ni].lower_bound(l2);
            while(it!=rem[ni].end()&&*it<=r2){
                int nj=*it;
                if((ni==i-n||ni==i+n)&&(nj==j-n||nj==j+n)){
                    it++;
                    continue;
                }
                it=rem[ni].erase(it);
                dist[ni][nj]=dist[i][j]+1;
            }
        }
        L(ni,l1,r1){
            if(ni==i-n||ni==i+n)continue;
            q.push({ni,l2});
            q.push({ni,r2});
        }
        L(nj,l2,r2){
            if(nj==j-n||nj==j+n)continue;
            q.push({l1,nj});
            q.push({r1,nj});
        }
    }
    cout<<dist[gr][gc]<<endl;
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:71:15: error: 'class std::deque<std::pair<int, int> >' has no member named 'push'
   71 |             q.push({ni,l2});
      |               ^~~~
Main.cpp:72:15: error: 'class std::deque<std::pair<int, int> >' has no member named 'push'
   72 |             q.push({ni,r2});
      |               ^~~~
Main.cpp:76:15: error: 'class std::deque<std::pair<int, int> >' has no member named 'push'
   76 |             q.push({l1,nj});
      |               ^~~~
Main.cpp:77:15: error: 'class std::deque<std::pair<int, int> >' has no member named 'push'
   77 |             q.push({r1,nj});
      |               ^~~~