Submission #1085433

#TimeUsernameProblemLanguageResultExecution timeMemory
1085433DucNguyen2007K-th path (IZhO11_kthpath)C++14
100 / 100
1 ms464 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pii pair<int,int> #define pll pair<ll,ll> #define fi first #define se second const int maxN=101; const ll inf=2e18; int n,m; ll dp[maxN+1][maxN+1],k,comb[maxN+1][maxN+1]; char c[maxN+1][maxN+1]; vector<pii> v[26]; string s; int main() { //freopen("","r",stdin); //freopen("","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>c[i][j]; } } cin>>k; for(int i=0;i<=60;i++) { comb[0][i]=1; } for(int i=1;i<=60;i++) { for(int j=i;j<=60;j++) { if(i==j) { comb[i][j]=1; } else comb[i][j]=comb[i-1][j-1]+comb[i][j-1]; } } s+=c[1][1]; dp[1][1]=1; for(int st=2;st<=n+m-1;st++) { ll res=0,cur=0; for(int ch=0;ch<26;ch++) { for(int i=1;i<=st;i++) { int j=st+1-i; if(c[i][j]-'a'==ch) { dp[i][j]=dp[i-1][j]+dp[i][j-1]; res+=(dp[i][j]*comb[n-i][n-i+m-j]); } else dp[i][j]=0; } if(res>=k) { s+=(char)(ch+'a'); k-=cur; break; } cur=res; } } cout<<s; }
#Verdict Execution timeMemoryGrader output
Fetching results...