Pashmak and Buses CodeForces - 459C

原题链接
考察:思维
思路:
  制造\(n\)\(d\)位互不相同的数字,\(dfs\)即可

Code

#include <iostream> 
#include <cstring>
#include <vector>
using namespace std;
typedef long long LL;
const int N = 1010;
int n,k,d,sum; 
vector<int> v;
int a[N][N];
bool cmp(int k,int d,int n)
{
	LL res = 1;
	for(int i=1;i<=d;i++)
	{
		res = (LL)res*k;
		if(res>=n) return 1;
	}
	return 0;
}
bool dfs(int sta)
{
	if(sum>=n) return 1;
	if(sta==d)
	{
		for(int i=0;i<v.size();i++)
		  a[sum][i] = v[i];
		sum++;
		return 0;
	}
	for(int i=1;i<=k;i++)
	{
		v.push_back(i);
		if(dfs(sta+1)) return 1;
		v.pop_back();
	}
	return 0;
}
int main()
{
	scanf("%d%d%d",&n,&k,&d);
	if(!cmp(k,d,n)) {puts("-1"); return 0;} 
	dfs(0);
	for(int i=0;i<d;i++)
	{
		for(int j=0;j<n;j++) printf("%d ",a[j][i]);
		printf("\n");
	}
	return 0;
}
posted @ 2021-07-21 08:34  acmloser  阅读(38)  评论(0编辑  收藏  举报