记录编号 |
580730 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO 1.5.4] 跳棋的挑战 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.010 s |
提交时间 |
2023-07-26 10:03:28 |
内存使用 |
2.29 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,ans;
int s[17],v[20][20];
//int li,rl,lr;
void pr(){
ans++;
if(ans <= 3){
for(int i = 1;i <= n;i++){
printf("%d ",s[i]);
}
printf("\n");
}
}
double log2(int x){
return log(x) / log(2);
}
void queen(int x,int li,int lr,int rl){
if(x > n){
pr();
return;
}
int z = li | lr | rl;
z = z ^ ((1 << n) - 1);
z = z & ((1 << n) - 1);
while(z){
int y = z & (-z);
int l = int(log2(y)+1);
s[x] = l;
queen(x+1,li|(1<<(l-1)),(lr|(1<<(l-1)))>>1,(rl|(1<<(l-1)))<<1);
z -= (z & (-z));
}
}
int main(){
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);
scanf("%d",&n);
queen(1,0,0,0);
printf("%d\n",ans);
return 0;
}