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;
}