比赛 |
普及组2016模拟练习3 |
评测结果 |
AAAAAAAAAA |
题目名称 |
圆桌会议 |
最终得分 |
100 |
用户昵称 |
__stdcall |
运行时间 |
0.026 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2016-11-15 20:19:26 |
显示代码纯文本
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
int n,k;
int h[20];
bool used[20];
int tb[20];
int cnt = 0;
void dfs( int idx ) {
if( idx == n+1 ) {
if( abs( tb[n]-tb[1] ) <= k ) ++cnt;
return;
}
for( int i = 2; i <= n; ++i ) { // 下一个位置的牛,h[1]已经被钦定了,所以i从2开始
if( !used[i] && abs( h[i]-tb[idx-1] ) <= k ) {
used[i] = true;
tb[idx] = h[i];
dfs(idx+1);
used[i] = false;
}
}
}
int main() {
freopen( "round.in", "r", stdin );
freopen( "round.out", "w", stdout );
scanf( "%d%d", &n, &k );
for( int i = 1; i <= n; ++i ) scanf( "%d", &h[i] );
used[1] = true; tb[1] = h[1]; // 因为是圆桌,所以固定第一头牛不变
dfs(2);
printf( "%d\n", cnt );
return 0;
}