답안 #750344

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
750344 2023-05-29T12:07:38 Z MrM7md Awesome Arrowland Adventure (eJOI19_adventure) C++17
0 / 100
17 ms 24020 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define F first
#define S second
#define pb push_back
#define all(a) a.begin(),a.end()
const int N=1e6+500;
const int off=(1<<18);
const int MOD = 1e9+7;

vector<vector<int>>gr(N);
char ch[502][502];
int val[N],vis[N];
int n,m;
map<pair<int,int>,int>mp;
void dij(int a){
   if(vis[a])return ;
   vis[a]=1;
   val[a]=0;
   priority_queue<pair<int,int>>pq;
   pq.push({0,a});
   while(!pq.empty()){
      int vl=pq.top().F,x=pq.top().S;
      pq.pop();
      // cout<<vl<<' '<<x<<endl;
      for(auto it:gr[x]){
         if(val[it]>val[x]+mp[{x,it}])val[it]=val[x]+mp[{x,it}];
         if(!vis[it]){
            vis[it]=1;
            pq.push({val[it]*-1,it});
         }
      }
   }
}
signed main(){
   ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
   cin >> m >> n;
   for(int i=0;i<m;i++){
      for(int j=0;j<n;j++){
         cin >> ch[i][j];
      }
   }
   for(int i=0;i<m;i++){
      for(int j=0;j<n;j++){
         val[n*i+j]=INT_MAX;
         if(ch[i][j]=='X')vis[n*i+j]=1;
         if(i){
            gr[n*i+j].pb(n*(i-1)+j);
            if(ch[i][j]=='E')mp[{n*i+j,n*(i-1)+j}]=3;
            if(ch[i][j]=='W')mp[{n*i+j,n*(i-1)+j}]=1;
            if(ch[i][j]=='N')mp[{n*i+j,n*(i-1)+j}]=0;
            if(ch[i][j]=='S')mp[{n*i+j,n*(i-1)+j}]=2;
         }
         if(i<m-1){
            gr[n*i+j].pb(n*(i+1)+j);
            if(ch[i][j]=='E')mp[{n*i+j,n*(i+1)+j}]=1;
            if(ch[i][j]=='W')mp[{n*i+j,n*(i+1)+j}]=3;
            if(ch[i][j]=='N')mp[{n*i+j,n*(i+1)+j}]=2;
            if(ch[i][j]=='S')mp[{n*i+j,n*(i+1)+j}]=0;
         }
         if(j){
            gr[n*i+j].pb(n*i+j-1);
            if(ch[i][j]=='E')mp[{n*i+j,n*i+j-1}]=2;
            if(ch[i][j]=='W')mp[{n*i+j,n*i+j-1}]=0;
            if(ch[i][j]=='N')mp[{n*i+j,n*i+j-1}]=3;
            if(ch[i][j]=='S')mp[{n*i+j,n*i+j-1}]=1;
         }
         if(j<n-1){
            gr[n*i+j].pb(n*i+j+1);
            if(ch[i][j]=='E')mp[{n*i+j,n*i+j+1}]=0;
            if(ch[i][j]=='W')mp[{n*i+j,n*i+j+1}]=2;
            if(ch[i][j]=='N')mp[{n*i+j,n*i+j+1}]=1;
            if(ch[i][j]=='S')mp[{n*i+j,n*i+j+1}]=3;
         }
      }
   }
   dij(0);
   int lst=(n-1)*(m-1)+n;
   if(val[lst]==INT_MAX)val[lst]=-1;
   cout<<val[lst];

}

Compilation message

adventure.cpp: In function 'void dij(long long int)':
adventure.cpp:25:11: warning: unused variable 'vl' [-Wunused-variable]
   25 |       int vl=pq.top().F,x=pq.top().S;
      |           ^~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 23892 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 23892 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23840 KB Output is correct
2 Incorrect 12 ms 23768 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 24020 KB Output is correct
2 Correct 13 ms 23764 KB Output is correct
3 Incorrect 17 ms 23856 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 23892 KB Output isn't correct
2 Halted 0 ms 0 KB -