제출 #1323456

#제출 시각아이디문제언어결과실행 시간메모리
1323456Jawad_Akbar_JJK번째 경로 (IZhO11_kthpath)C++20
0 / 100
1 ms332 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 35; #define int long long int dp[N][N], n, m, k; char a[N][N]; void get(vector<pair<char, pair<int, int>>> v){ // cout<<"here again!!!!!!!!!!!!!!!!!!"<<endl; cout<<v.back().first; if (v[0].second == make_pair(n, m)) return; vector<pair<char, pair<int, int>>> v2; for (auto [c, pr] : v){ auto [i, j] = pr; if (i + 1 <= n) v2.push_back({a[i+1][j], {i+1, j}}); if (j + 1 <= m) v2.push_back({a[i][j+1], {i, j+1}}); } sort(begin(v2), end(v2)); v2.resize(unique(begin(v2), end(v2)) - begin(v2)); int k2 = 0; char prv = '0'; for (auto [c, pr] : v2){ auto [i, j] = pr; if (c != prv and k2 < k){ k -= k2, k2 = 0; prv = c; } k2 += dp[i][j]; // cout<<i<<" "<<j<<" "<<k2<<" "<<k<<endl; if (k2 >= k){ // cout<<"done"<<endl; while (v2.size() > 0 and v2.back().first != c) v2.pop_back(); while (v2.size() > 0 and v2.front().first != c) v2.erase(begin(v2)); break; } } get(v2); } signed main(){ cin>>n>>m; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++) cin>>a[i][j]; } dp[n][m] = 1; for (int i=n;i>=1;i--){ for (int j=m;j>=1;j--) dp[i][j] += dp[i+1][j] + dp[i][j+1]; } // for (int i=1;i<=n;i++){ // for (int j=1;j<=m;j++){ // if (dp[i][j] < 10) // cout<<' '; // cout<<dp[i][j]<<' '; // } // cout<<'\n'; // } cin>>k; get({{a[1][1], {1, 1}}}); }
#Verdict Execution timeMemoryGrader output
Fetching results...