Submission #1339902

#TimeUsernameProblemLanguageResultExecution timeMemory
1339902ZeroPatkice (COCI20_patkice)C++20
50 / 50
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define ff first
#define ss second

int n,m;
const int N = 101;
char a[N][N];

int ans;
bool ok;


void dfs(int i, int j, int c){
    if(i > n || i < 1 || j > m || j < 1 || a[i][j] == 'o' || a[i][j] == '.') return;
    if(a[i][j] == 'x'){
        ok = 1;
        ans = c;
        return;
    }
    if(a[i][j] == '>') dfs(i,j+1,c+1);
    if(a[i][j] == '<') dfs(i,j-1,c+1);
    if(a[i][j] == '^') dfs(i-1,j,c+1);
    if(a[i][j] == 'v') dfs(i+1,j,c+1);
}


signed main(){
    cin.tie(0)->sync_with_stdio(0);
    
    cin >> n >> m;
    int oi = 0, oj = 0;
    for(int i=1; i <= n; i ++){
        for(int j=1; j <= m; j ++){
            cin >> a[i][j];
            if(a[i][j] == 'o') oi = i, oj = j;
        }
    }
    int mn = INT_MAX;
    map<char,int> mp;

    dfs(oi+1, oj,1);
    if(ok)mn = min(mn, ans), mp['S'] = ans;
    ok = 0;
    ans = 0;

    dfs(oi-1, oj,1);
    if(ok)mn = min(mn, ans), mp['N'] = ans;
    ok = 0;
    ans = 0;

    dfs(oi, oj+1,1);
    if(ok)mn = min(mn, ans), mp['E'] = ans;
    ok = 0;
    ans = 0;

    dfs(oi, oj-1,1);
    if(ok)mn = min(mn, ans), mp['W'] = ans;
    ok = 0;
    ans = 0;

    bool f = 0;
    for(auto i : mp){
        if(i.ss == mn){
            f = 1;
            cout << ":)\n" << i.ff;
            break;
        }
    }
    if(!f) cout << ":(";



}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...