Codeforces 459C Pashmak and Buses(构造)

这篇博客探讨了Codeforces 459C题目的解决方案,即如何在d天内安排n个学生使用k辆车,确保每天至少有两个学生一起乘车,且每辆车每天只被使用一次。通过深度优先搜索(DFS)策略,可以构造出满足条件的乘车方案,当找到足够的方案数时停止递归。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:Codeforces 459C Pashmak and Buses

题目大意:有n个学生,d天,k辆车,每天会到一个不同的地方,即要乘坐一次车,要求每人两个学生在每一天共同乘坐一辆车。个数安排方案。

解题思路:每个学生的乘坐方案即使一个长度为d,元素范围1~k的序列,不出现重复即可。dfs处理出方案,方案数足够后跳出递归。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;
const int maxn = 1005;

ll d, k;
int n, c, v[maxn][maxn], arr[maxn];

bool judge () {
    ll ret = 1;
    for (int i = 1; i <= d; i++) {
        ret *= k;
        if (ret >= n)
            return true;
    }
    return false;
}

void solve (int u) {

    if (d == u) {
        memcpy(v[c++], arr, sizeof(arr));
        return;
    }

    int& i = arr[u];
    for (i = 1; i <= k; i++) {
        solve(u+1);
        if (c == n)
            return;
    }
}

int main () {
    scanf("%d%lld%lld", &n, &k, &d);

    if (judge ()) {
        c = 0;
        solve(0);
        for (int i = 0; i < d; i++) {
            printf("%d", v[0][i]);
            for (int j = 1; j < n; j++)
                printf(" %d", v[j][i]);
            printf("\n");
        }
    } else
        printf("-1\n");
    return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值