제출 #1323549

#제출 시각아이디문제언어결과실행 시간메모리
1323549MuhammadSaramK번째 경로 (IZhO11_kthpath)C++20
0 / 100
346 ms327680 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int M = 60;

int ncr[M][M];
vector<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].push_back({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].push_back({x+1,y});
					if (y<m) se[a[x-1][y]-'a'][1-id].push_back({x,y+1});
				}
				id=1-id;
				break;
			}
			else
				val+=su;
		}
	}
	cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...