Submission #1323887

#TimeUsernameProblemLanguageResultExecution timeMemory
1323887MuhammadSaramK-th path (IZhO11_kthpath)C++20
100 / 100
1 ms332 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int M = 60;

int ncr[M][M];
map<pair<int,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][{1,1}]=1;
	string ans;
	for (int ct=0;ct<n+m-1;ct++)
	{
		for (int j=0;j<26;j++)
		{
			int su=0, x, y;
			for (auto e:se[j][id])
				x=e.first.first, y=e.first.second, su+=ncr[n+m-x-y][n-x]*e.second;
			if (val+su>=k)
			{
				ans+=char('a'+j);
				for (int c=0;c<M;c++) se[c][1-id].clear();
				for (auto e:se[j][id])
				{
					x=e.first.first, y=e.first.second;
					if (x<n) se[a[x][y-1]-'a'][1-id][{x+1,y}]+=e.second; 
					if (y<m) se[a[x-1][y]-'a'][1-id][{x,y+1}]+=e.second; 
				}
				id=1-id;
				break;
			}
			else
				val+=su;
		}
	}
	cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...