제출 #1137081

#제출 시각아이디문제언어결과실행 시간메모리
1137081lopkusK-th path (IZhO11_kthpath)C++20
0 / 100
137 ms327680 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int n, m, k; char a[35][35]; vector<string> pwuiz[1001]; vector<string> all1, all2; void dfs1(int x, int y, string c) { if(x == 1 && y == 1) { string w = c; reverse(w.begin(), w.end()); all1.push_back(w); return; } if(x - 1) { dfs1(x - 1, y, c + a[x - 1][y]); } if(y - 1) { dfs1(x, y - 1, c + a[x][y - 1]); } } void dfs2(int x, int y, string c) { if(x == n && y == m) { all2.push_back(c); return; } if(x + 1 <= n) { dfs2(x + 1, y, c + a[x + 1][y]); } if(y + 1 <= m) { dfs2(x, y + 1, c + a[x][y + 1]); } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cin >> a[i][j]; } } cin >> k; vector<pair<string, int>> left; vector<pair<string, int>> right; for(int i = 1; i <= n; i++) { int j = m / 2; string u = ""; u += a[i][j]; dfs1(i, j, u); for(auto it : all1) { left.push_back({it, i}); } u = ""; u = a[i][j + 1]; dfs2(i, j + 1, u); for(auto it : all2) { right.push_back({it, i}); } all1.clear(); all2.clear(); } sort(left.begin(), left.end()); sort(right.begin(), right.end()); for(auto it : right) { pwuiz[it.second].push_back(it.first); } for(int i = 1; i <= n; i++) { sort(pwuiz[i].begin(), pwuiz[i].end()); } int current = 0; for(auto it : left) { current += pwuiz[it.second].size(); if(current >= k) { current -= pwuiz[it.second].size(); cout << it.first << pwuiz[it.second][current - k + 1]; break; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...