Submission #883661

#TimeUsernameProblemLanguageResultExecution timeMemory
883661vjudge1Pohlepko (COCI16_pohlepko)C++17
80 / 80
50 ms8284 KiB
#pragma GCC optimize("unroll-loops,Ofast,O3")
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define spc << " " <<
#define endl "\n"
#define all(x) x.begin(), x.end()
#define int long long
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<ii>
#define st first
#define nd second
#define inf 1000000009
#define MOD 998244353
#define lim 200005
using namespace std;




void solve(){
    int n,m; cin >> n >> m;
    string ans="";
    char arr[n+1][m+1];
    for(int i=1; i<=n; i++){
        string s; cin >> s;
        for(int j=1; j<=m; j++){
            arr[i][j] = s[j-1];
        }
    }

    ans += arr[1][1];
    set<ii> bfs, bfs2;
    bfs.insert({1,1});
    for(int i=1; i<=n+m-2; i++){
        int mini=inf;
        for(auto p:bfs){
            if(p.st<n){
                mini = min(mini, (long long) arr[p.st+1][p.nd]-'a');
            }
            if(p.nd<m){
                mini = min(mini, (long long) arr[p.st][p.nd+1]-'a');
            }
        }
        for(auto p:bfs){
            if(p.st<n){
                if(arr[p.st+1][p.nd]-'a' == mini) bfs2.insert({p.st+1, p.nd});
            }
            if(p.nd<m){
                if(arr[p.st][p.nd+1]-'a' == mini) bfs2.insert({p.st, p.nd+1});
            }
        }
        ans += (mini+'a');
        swap(bfs, bfs2);
        bfs2.clear();
    }
    cout << ans << endl;
}



signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    #ifdef Local
    freopen("in","r",stdin);
    freopen("out","w",stdout);
    #endif

    /*freopen("fcolor.in","r",stdin);
    freopen("fcolor.out","w",stdout);*/

    int t=1;
    //cin >> t;
    while(t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...