您的位置:首页 > 其它

Codeforces 459C

2014-08-16 17:24 357 查看
#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <iostream>
#define MAXN 1005
using namespace std;
int a[MAXN][MAXN];
int main() {
/*
每个人每天可以选K辆车,D天可以有K^D种乘车方案,只要每个人的乘车方案均不同,则满足要求。
如果K>=N,可以在最后一天一人安排一辆车即可。
K<N时可以先假设有N辆车,之后处理矩阵,对每个大于K的元素取模并向上进位,类似于大数加法。
检查矩阵是否有大于K的元素,若有,则说明方案溢出,输出"-1"。否则输出矩阵。
*/
int N,K,D,i,j;
loop:
while(~scanf("%d%d%d",&N,&K,&D)) {
memset(a,0,sizeof(a));
for(j=0;j<N;++j)
a[D-1][j]=j;
for(i=D-1;i>0;--i) {
for(j=0;j<N;++j) {
a[i-1][j]+=a[i][j]/K;
a[i][j]%=K;
}
}
for(i=0;i<D;++i) {
for(j=0;j<N;++j) {
if(a[i][j]>=K) {
puts("-1");
goto loop;
}
}
}
for(i=0;i<D;++i) {
for(j=0;j<N;++j)
printf("%d%s",a[i][j]+1,j==N-1?"\n":" ");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: