Submission #499020

#TimeUsernameProblemLanguageResultExecution timeMemory
499020PoPularPlusPlusPohlepko (COCI16_pohlepko)C++17
80 / 80
244 ms11980 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	// your code goes here
	int n , m;
	cin >> n >> m;
	char arr[n][m];
	for(int i = 0; i < n; i++){
	    for(int j = 0; j < m; j++)cin >> arr[i][j];
	}
	bool vis[n][m];
	memset(vis,0,sizeof vis);
	vis[0][0] = 1;
	if(n > 1)vis[1][0] = 1;
    if(m > 1)vis[0][1] = 1;
	for(int di = 1; di < n + m; di++){
	    char mn = 'z';
	    for(int j = 0; j <= min(di , m - 1); j++){
	        if(di - j >= n){
	            continue;
	        }
	        int i = di - j;
	        if(vis[i][j]){
	            mn = min(mn , arr[i][j]);
	        }
	    }
	    for(int j = 0; j <= min(di , m - 1); j++){
	        if(di - j >= n){
	            continue;
	        }
	        int i = di - j;
	        if(vis[i][j]){
	            if(mn == arr[i][j]){
	                if(i + 1 < n)vis[i + 1][j] = 1;
	                if(j + 1 < m)vis[i][j + 1] = 1;
	            }
	            else vis[i][j] = 0;
	        }
	    }
	}
	string ans = "";
	ans += arr[n-1][m-1];
	int i = n-1 , j = m - 1;
	while(i != 0 || j != 0){
	    if(i - 1 >= 0 && vis[i-1][j]){
	       i--;
	       ans += arr[i][j];
	    }
	    else {
	        j--;
	        ans += arr[i][j];
	    }
	}
	reverse(ans.begin() , ans.end());
	cout << ans << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...