286922026-05-27 18:03:58KristófFantasztikus Kaland Nyílországbancpp17Elfogadva 100/100104ms9440 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
ll INF=1e16;

struct Node
{
ll cost,i,j;
bool operator<(const Node &other) const
    {
    return cost>other.cost;
    }
};
int n,m;
bool isvalid(int i,int j)
    {
    if(i>=n || i<0)return false;
    if(j>=m || j<0)return false;
    return true;
    }
int main() {
	cin>>n>>m;

    vector<vector<int>> base(n,vector<int> (m));
    map<char,int> type;
    type['N']=0;
    type['E']=1;
    type['S']=2;
    type['W']=3;
    type['X']=5;
    for(int i=0;i<n;i++)
        {
        for(int j=0;j<m;j++)
            {
            char x;cin>>x;
            base[i][j]=type[x];
            }
        }
    vector<vector<ll>> dp(n,vector<ll> (m,INF));
    dp[0][0]=0;
    priority_queue<Node> pq;
    pq.push({0,0,0});
    vector<pair<int,int>> dir={{-1,0},{0,1},{1,0},{0,-1}};
    while(pq.size())
        {
        auto [cost,i,j]=pq.top();pq.pop();
        if(cost>dp[i][j] || base[i][j]==5)continue;
        int cnt=-1;
        for(auto[x,y]:dir)
            {
            cnt++;
            int ni=i+x;
            int nj=j+y;
            if(!isvalid(ni,nj))continue;
            int ncost=(cnt-base[i][j]+4)%4;
            if(ncost+cost<dp[ni][nj])
                {
                dp[ni][nj]=cost+ncost;
                pq.push({ncost+cost,ni,nj});
                }
            }
        }
    cout<<((dp[n-1][m-1]==INF)? -1 : dp[n-1][m-1]);
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms320 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
subtask212/12
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms492 KiB
7Elfogadva1ms508 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms368 KiB
subtask312/12
1Elfogadva2ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
subtask416/16
1Elfogadva2ms316 KiB
2Elfogadva2ms500 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms508 KiB
5Elfogadva2ms508 KiB
6Elfogadva2ms316 KiB
7Elfogadva2ms316 KiB
8Elfogadva2ms316 KiB
9Elfogadva1ms332 KiB
10Elfogadva1ms316 KiB
subtask550/50
1Elfogadva6ms580 KiB
2Elfogadva1ms508 KiB
3Elfogadva7ms564 KiB
4Elfogadva4ms828 KiB
5Elfogadva67ms3452 KiB
6Elfogadva70ms3444 KiB
7Elfogadva24ms3184 KiB
8Elfogadva68ms3380 KiB
9Elfogadva104ms9440 KiB
10Elfogadva24ms3192 KiB