#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M = 60;
int ncr[M][M];
set<pair<int,int>> se[M][2];
signed main()
{
for (int i=0;i<M;i++)
{
ncr[i][0]=1;
for (int j=1;j<=i;j++)
ncr[i][j]=ncr[i-1][j]+ncr[i-1][j-1];
}
int n,m,k;
cin>>n>>m;
string a[n];
for (int i=0;i<n;i++)
cin>>a[i];
cin>>k;
int val=0, id=0;
se[a[0][0]-'a'][0].insert({1,1});
string ans;
for (int ct=0;ct<n+m-1;ct++)
{
for (int j=0;j<26;j++)
{
int su=0;
for (auto [x,y]:se[j][id]) su+=ncr[n+m-x-y][n-x];
if (val+su>=k)
{
ans+=char('a'+j);
for (int c=0;c<M;c++) se[c][1-id].clear();
for (auto [x,y]:se[j][id])
{
if (x<n) se[a[x][y-1]-'a'][1-id].insert({x+1,y});
if (y<m) se[a[x-1][y]-'a'][1-id].insert({x,y+1});
}
id=1-id;
break;
}
else
val+=su;
}
}
cout<<ans<<endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |