公交車

1009: 公交車
時間限制: 1 Sec 內存限制: 128 MB
題目描述
最近pashmak被運輸公司錄用了,公司有k輛車,現在有個學校n個學生要用車,學校要將這些學生送到d個不同地方,每個地方呆1天,總共要d天。每天公司要提供車運輸這些學生,pashmak就要安排方案。學校爲了防止這些學生太過親密,不希望有任意兩個學生d天內都是同一輛車。問pashmak能否合理安排。

注意,我們假設每輛車的容量是無限的。

輸入
輸入3個數,n, k, d (1 <= n, d <= 1000; 1 <= k <= 10 ^9)

輸出
如果可以輸出”yes”

然後輸出n行,每行d個數,每行輸出每個人的安排車輛(車輛編號是從1到k)

方案有多種,這裏要求輸出字典序最小的一種

不可以輸出”no”

樣例輸入
3 2 2
樣例輸出
yes
1 1
1 2
2 1
提示
輸入

3 2 1

輸出

no

來源
cf459C


這道題可以簡化爲k^d與n的關係
如果小於,那麼輸出no
不然就輸出yes
輸出方案很簡單
先將一個a數組全賦值爲1
然後從尾部不斷加一
維護k進制即可

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n,k,d;
int a[1005];
int main()
{
    scanf("%d%d%d",&n,&k,&d);
    ll kd=1;
    for (int i=1;i<=d;i++)
    {
        kd=kd*k;
        if (kd>=n) break;
    }
    if (kd<n)
    {
        printf("no\n");
        return 0;
    }
    printf("yes\n");
    for (int j=1;j<=d;j++)
        a[j]=1;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<d;j++)
            printf("%d ",a[j]);
        printf("%d\n",a[d]);
        int x=d;
        a[x]++;
        while (a[x]>k)
        {
            a[x--]=1;
            a[x]++;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章