1 条题解

  • 0
    @ 2025-10-8 16:54:29

    题目描述

    (题目信息缺失,根据代码逻辑推测:给定n个点的b值和整数K,求满足以下条件的环形排列数:排列中相邻两点的b值差的绝对值≤K,且首尾两点的b值差的绝对值≤K,排列的第一个点固定为1)

    #include<bits/stdc++.h>
    using namespace std;
    
    int n, K, ans, a[15], b[15];
    bool v[15];
    
    void dfs(int k) {
        if (k == n + 1) {
            if (abs(b[a[n]] - b[a[1]]) <= K) ans++; 
        } else {
            for (int i = 2; i <= n; i++)
                if (v[i] == 0 && abs(b[i] - b[a[k-1]]) <= K) {
                    a[k] = i;
                    v[i] = 1;
                    dfs(k + 1);
                    a[k] = 0;
                    v[i] = 0;                 
                }               
        }       
    }
    
    int main() {
        scanf("%d %d", &n, &K);
        for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
        memset(v, 0, sizeof(v));
        a[1] = 1; v[1] = 1;
        ans = 0; dfs(2);
        printf("%d", ans);
        return 0;
    }
    
    • 1

    *【递归】相邻两数差不超K的圆排列

    信息

    ID
    870
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    318
    已通过
    83
    上传者