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("\n");

        res ++;
        return;
    }
    for (i=1;i<=n;i++){
//        if (now==1 && table[1] = 16){
//            printf("HERE!\n");
//        }
//        if (table[1] == 16 && table[2] == 6 && table[3] == 2){
//            printf("HERE!\n");
//        }
        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\n",res/n);
    }
    return 0;
}
时间: 2024-08-27 21:07:59

XidianOJ 1095 派对的相关文章

NYOJ---题目733万圣节派对

万圣节派对 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 万圣节有一个Party,XadillaX显然也要去凑热闹了.因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了.很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪: 门票号是由0~6组成的六位数(0~6这几个数字可重用) 每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的) 每一个门票号相邻的两位相差必须在四以下(≤4)(如016245是不行

Light oj 1095 - Arrange the Numbers (组合数学+递推)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意: 给你包含1~n的排列,初始位置1,2,3...,n,问你刚好固定前m个数中的k个数的位置,问你有多少中排列方案.(比如5 3 2有1 4 3 2 5这种方案,1和3固定了) 思路: 前m个取k个就是C(m, k)个方案.然后就是类似错排的思想,设dp[i]为i个数在初始位置各不相同.其中的组合数用逆元算出. ans = dp[m - k] * C(n - m,

cocos2d-x开发的《派对小游戏》-github源码分享

这是博主很久以前写的一个cocos2d-x跨平台小游戏,我称它为<派对小游戏>,现在分享给大家,希望对大家有所帮助的话. 项目源码地址:https://github.com/xiebaochun/partygame-cocos2d-x 游戏截图如下: 主页: 打地鼠 视觉空间 拖拖拉拉

luogu P1821 [USACO07FEB]银牛派对Silver Cow Party

题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires

英国儿童生日派对攀比风

近两年,英国儿童的生日派对愈发隆重和昂贵,甚至成为一种逃不掉的负担.家长们简直有些吃不消,开始怨声载道了.http://www.ximalaya.com/zhubo/27465564/ http://www.ximalaya.com/zhubo/27465582/ http://www.ximalaya.com/zhubo/27465600/ http://www.ximalaya.com/zhubo/27465619/ http://www.ximalaya.com/zhubo/2746562

派对选址

派对选址 (party.pas/c/cpp) [题目描述]在2022年,scu_acmers决定举行一个聚会,并且大多数老 scu_acmers队员已经收到了邀请函,包括队员 onmylove,tanlinghang和zsasuke(scu_isap队的老队员). 从 scu毕业已经 10年了,现在他们住在不同的城市.他们都非常傲慢,都认为在所有 scu_acmers队员中,自己才是最擅长跑步的人.为了证明这一点,他们都决定花上几天时间跑向目的地(聚会所举办的城市),并且为了节省体力,他们每个人

bzoj 1095 括号序列求两点距离

大致题意: 给一棵树,每个节点最开始都是黑色,有两种操作,1.询问树中相距最远的一对黑点的距离 2.反转一个节点的颜色 一种做法: 建立出树的括号序列,类似这样: [A[B][C]],所以长度为3*n 假如我们要询问AC间的距离,提取出中间的括号:[]],匹配消去后得到],其长度就是距离. 现在我们要做的就是修改点的状态,并且动态维护答案.要用到一些求与绝对值相关的式子的技巧. 1 /********************************************************

九度OJ 1095 2的幂次方

题目1095:2的幂次方 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:772 解决:525 题目描述: Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0. Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 +

lightoj 1095 - Arrange the Numbers(dp+组合数)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题解:其实是一道简单的组合数只要推导一下错排就行了.在这里就推导一下错排 dp[i]=(i-1)*dp[i-2](表示新加的那个数放到i-1中的某一个位置然后那个被放位置的数放在i这个位置就是i-2的错排)+(i-1)*dp[i-1](表示新加的那个数放到i-1中的某一个位置然后用那个位置被占的数代替i这个位置的数就是i-1的错排) #include <iostream