zoukankan      html  css  js  c++  java
  • CF459C Pashmak and Buses 打印全排列

            这题假设将终于的结果竖着看,每一列构成的数能够看成是k进制的数。一共同拥有d列,随意两列都不同样,所以这就是一个d位k进制数全排列的问题,一共同拥有k ^ d个排列。假设k ^ d < n,则打印-1。

            打印终于结果时设第一列就为1 1 1 1 ... 1,然后依次每列添加1后(公交车编号从1開始,不是从0開始) 。注意,这里是k进制。

    #include <stdlib.h>  
    #include <stdio.h>  
    #include <algorithm>  
    #include <vector>  
    #include <math.h>
    using namespace std;
    
    int tmpvalue[1001][1001];
    
    int main()
    {
    #ifdef _DEBUG
    	freopen("d:\in.txt", "r", stdin);
    #endif
    	int n, k, d;
    	scanf("%d %d %d", &n, &k, &d);
    	if (k < n)
    	{
    		int total = 1;
    		for (int i = 1; i <= d;i++)
    		{
    			total *= k;
    			if (total >= n)
    			{
    				break;
    			}
    		}
    		if (total < n)
    		{
    			printf("-1
    ");
    			return 0;
    		}
    	}
    	for (int i = 1; i <= d;i++)
    	{
    		tmpvalue[i][1] = 1;
    	}
    	for (int i = 2; i <= n;i++)
    	{
    		for (int j = 1; j <= d;j++)
    		{
    			tmpvalue[j][i] = tmpvalue[j][i - 1];
    		}
    		tmpvalue[1][i] += 1;
    		for (int j = 1; j <= d; j++)
    		{
    			if (tmpvalue[j][i] > k)
    			{
    				tmpvalue[j][i] = 1;
    				tmpvalue[j + 1][i]++;
    			}
    			else
    				break;
    		}
    	}
    	for (int i = 1; i <= d;i++)
    	{
    		for (int j = 1; j <= n;j++)
    		{
    			printf("%d ", tmpvalue[i][j]);
    		}
    		printf("
    ");
    	}
    	return 0;
    }


            

  • 相关阅读:
    类型转换
    struts2默认拦截器
    struts2自定义拦截器
    struts2之I18N
    代理模式
    抽象类 abstract class 接口
    java基础题
    final
    内部类
    tomcat 端口占用问题解决
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6848541.html
Copyright © 2011-2022 走看看