XidianOJ 1095 派对
Posted TOTOTOTOTZZZZZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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+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; }
以上是关于XidianOJ 1095 派对的主要内容,如果未能解决你的问题,请参考以下文章