zoukankan      html  css  js  c++  java
  • XidianOJ 1095 派对

    题目描述

    Matrix67发现身高接近的人似乎更合得来。Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排在圆桌上。Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K。请告诉Matrix67他共有多少种安排方法。

    输入

    多组数据
    第一行输入两个用空格隔开的数N和K,其中1<=N<=10,1<=K<=1 000 000。
    第二行到第N+1行每行输入一个人的身高值。所有人的身高都是不超过1 000 000的正整数

    输出

    输出符合要求的安排总数

    --正文
    N非常小,直接一个一个摆过去试试就好
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int height[11];
    int visit[11];
    int table[11];
    int n,k;
    int res = 0;
    
    int my_abs(int a){
        if (a<0) return -a;
        return a;
    }
    
    bool canPos(int i,int height){
        if (i == 1) return true;
        if (i == n){
            if ( my_abs(height-table[i-1]) <= k && my_abs(height - table[1]) <= k){
                return true;
            }
            else return false;
        }
        else if (my_abs(height-table[i-1]) <= k){
            return true;
        }
        else return false;
    }
    
    void pos(int now){
        int i;
        if (now == n+1) {
    //        for (i=1;i<=n;i++){
    //            printf("%d ",table[i]);
    //        } printf("
    ");
            
            res ++;
            return;
        }
        for (i=1;i<=n;i++){
    //        if (now==1 && table[1] = 16){
    //            printf("HERE!
    ");
    //        }
    //        if (table[1] == 16 && table[2] == 6 && table[3] == 2){
    //            printf("HERE!
    ");
    //        }
            if (!visit[i] && canPos(now,height[i])){
                table[now] = height[i];
                visit[i] = 1;
                pos(now+1);
                table[now] = 0;
                visit[i] = 0;
            }
        }
    }
    
    int main(){
        while (scanf("%d %d",&n,&k) != EOF){
            int i;
            res = 0;
            memset(visit,0,sizeof(visit));
            memset(table,0,sizeof(table));
            for (i=1;i<=n;i++) scanf("%d",&height[i]);
            pos(1);
            printf("%d
    ",res/n);
        }
        return 0;
    }
  • 相关阅读:
    洛谷 [P1024]一元三次方程求解
    洛谷 [P1426] 通往奥格瑞玛的道路
    洛谷 [p1439] 最长公共子序列 (NlogN)
    洛谷 [P1182] 数列分段
    洛谷 [P1314] 聪明的质检员(NOIP2011 D2T2)
    洛谷 [P1280] 尼克的任务
    洛谷 [P1801] 黑匣子
    洛谷 [p1196] 银河英雄传说
    洛谷 [P2024] 食物链
    洛谷 [P1198] 最大数
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6143235.html
Copyright © 2011-2022 走看看