| 16939 | 2025-05-16 16:56:07 | tomi7 | Fantasztikus Kaland Nyílországban | cpp17 | Accepted 100/100 | 163ms | 22380 KiB |
// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
#include <queue>
using namespace std;
const int INF=1e9;
int main() {
int n, m;cin>>n>>m;
vector<vector<int>> a(n, vector<int> (m, -1));
vector<vector<array<int, 2>>> elek(n*m);
int hihi=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
char c;
cin>>c;
if(c=='S'){
a[i][j]=0;
}else if(c=='N'){
a[i][j]=2;
}else if(c=='W'){
a[i][j]=3;
}else if(c=='E'){
a[i][j]=1;
}
// cout<<a[i][j]<<' ';
}
// cout<<endl;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]==-1){hihi++; continue;}
if(i!=0){
if(a[i][j]!=-1){
int hhhh=a[i][j];
if(a[i][j]<2){
a[i][j]+=4;
}
elek[hihi].push_back({abs(a[i][j]-2), hihi-m});
a[i][j]=hhhh;
}
}
if(i!=n-1){
if(a[i][j]!=-1){
elek[hihi].push_back({abs(a[i][j]-0), hihi+m});
}
}
if(j!=0){
if(a[i][j]!=-1){
int hhhh=a[i][j];
if(a[i][j]<3){
a[i][j]+=4;
}
elek[hihi].push_back({abs(a[i][j]-3), hihi-1});
a[i][j]=hhhh;
}
}
if(j!=m-1){
if(a[i][j]!=-1){
int hhhh=a[i][j];
if(a[i][j]<1){
a[i][j]+=4;
}
elek[hihi].push_back({abs(a[i][j]-1), hihi+1});
a[i][j]=hhhh;
}
}
hihi++;
}
}
/*for(int i=0;i<n*m;i++){
for(auto[x, y]: elek[i]){
cout<<i<<' '<<y<<' '<<x<<'\n';
}
}*/
priority_queue<array<int, 2>> q;
vector<int> dist(n*m, INF);
vector<bool> vis(n*m, false);
dist[0]=0;
q.push({0, 0});
while(!q.empty()){
int x=q.top()[0], y=q.top()[1];
if(vis[y]){
q.pop();
continue;
}
vis[y]=true;
q.pop();
for(auto[z, h]: elek[y]){
if(dist[h]>dist[y]+z){
dist[h]=dist[y]+z;
q.push({-dist[h], h});
}
}
}
if(dist[n*m-1]==INF){
cout<<-1<<'\n';
}else{
cout<<dist[n*m-1]<<'\n';
}
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 10/10 | ||||||
| 1 | Accepted | 1ms | 512 KiB | ||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| 3 | Accepted | 1ms | 416 KiB | ||||
| 4 | Accepted | 1ms | 316 KiB | ||||
| 5 | Accepted | 1ms | 408 KiB | ||||
| 6 | Accepted | 1ms | 316 KiB | ||||
| 7 | Accepted | 1ms | 316 KiB | ||||
| 8 | Accepted | 1ms | 400 KiB | ||||
| 9 | Accepted | 1ms | 316 KiB | ||||
| 10 | Accepted | 1ms | 400 KiB | ||||
| subtask2 | 12/12 | ||||||
| 1 | Accepted | 1ms | 380 KiB | ||||
| 2 | Accepted | 1ms | 404 KiB | ||||
| 3 | Accepted | 1ms | 564 KiB | ||||
| 4 | Accepted | 1ms | 404 KiB | ||||
| 5 | Accepted | 1ms | 412 KiB | ||||
| 6 | Accepted | 2ms | 512 KiB | ||||
| 7 | Accepted | 1ms | 316 KiB | ||||
| 8 | Accepted | 1ms | 316 KiB | ||||
| 9 | Accepted | 1ms | 316 KiB | ||||
| 10 | Accepted | 1ms | 316 KiB | ||||
| subtask3 | 12/12 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| 3 | Accepted | 1ms | 316 KiB | ||||
| 4 | Accepted | 1ms | 316 KiB | ||||
| subtask4 | 16/16 | ||||||
| 1 | Accepted | 1ms | 404 KiB | ||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| 3 | Accepted | 1ms | 316 KiB | ||||
| 4 | Accepted | 1ms | 404 KiB | ||||
| 5 | Accepted | 1ms | 316 KiB | ||||
| 6 | Accepted | 1ms | 404 KiB | ||||
| 7 | Accepted | 1ms | 404 KiB | ||||
| 8 | Accepted | 1ms | 328 KiB | ||||
| 9 | Accepted | 1ms | 404 KiB | ||||
| 10 | Accepted | 1ms | 316 KiB | ||||
| subtask5 | 50/50 | ||||||
| 1 | Accepted | 13ms | 2028 KiB | ||||
| 2 | Accepted | 2ms | 400 KiB | ||||
| 3 | Accepted | 14ms | 2212 KiB | ||||
| 4 | Accepted | 12ms | 3136 KiB | ||||
| 5 | Accepted | 150ms | 17984 KiB | ||||
| 6 | Accepted | 146ms | 17940 KiB | ||||
| 7 | Accepted | 70ms | 17768 KiB | ||||
| 8 | Accepted | 138ms | 17976 KiB | ||||
| 9 | Accepted | 163ms | 22380 KiB | ||||
| 10 | Accepted | 70ms | 17780 KiB | ||||