Submission #1125978

#TimeUsernameProblemLanguageResultExecution timeMemory
1125978whoknowPatkice II (COCI21_patkice2)C++20
110 / 110
301 ms75384 KiB
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second
#define MAXN 2005
#define ii pair<int,int>
#define bit(i,j) ((i>>j)&1)
#define sz(i) (int)i.size()
#define endl '\n'
using namespace std;
const int INF = 1e9 + 7;
int dx[] = {0, 0, -1, 1},
           dy[] = {1, -1, 0, 0};
int n, m;
char a[MAXN][MAXN], c[4] = {'>', '<', '^', 'v'};
ii st, ed;
namespace sub1
{
int dp[MAXN][MAXN];
struct trip
{
    int u, v, k;
};
trip trace[MAXN][MAXN];
bool check(int i, int j)
{
    return (i < 1 || j < 1 || i > n || j > m);
}
void bfs()
{
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            dp[i][j] = INF;
    deque<ii>q;
    q.push_front(st);
    dp[st.F][st.S] = 0;
    while(sz(q))
    {
        ii top = q.front();
        q.pop_front();
        int u = top.F, v = top.S;
        for(int i = 0; i < 4; i++)
        {
            int nx = u + dx[i], ny = v + dy[i];
            if(check(nx, ny))
                continue;
            int cost = (a[u][v] != 'o' && a[u][v] != c[i]);
            if(dp[nx][ny] > dp[u][v] + cost)
            {
                dp[nx][ny] = dp[u][v] + cost;
                trace[nx][ny] = {u, v, i};
                if(cost)
                    q.push_back({nx, ny});
                else
                    q.push_front({nx, ny});
            }
        }
    }
}
void query()
{
    queue<ii>q;
    q.push(ed);
    while(sz(q))
    {
        ii top = q.front();
        q.pop();
        if(a[top.F][top.S] == 'o')
            break;
        trip x = trace[top.F][top.S];
        q.push({x.u, x.v});
        if(a[x.u][x.v] != 'o')
            a[x.u][x.v] = c[x.k];
    }

}
void solve()
{
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            if(a[i][j] == 'o')
                st = {i, j};
            if(a[i][j] == 'x')
                ed = {i, j};
        }
    bfs();
    query();
    cout << dp[ed.F][ed.S] << endl;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
            cout << a[i][j];
        cout << endl;
    }
}
}
main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> a[i][j];
    sub1::solve();
}

Compilation message (stderr)

Main.cpp:98:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   98 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...