比赛 |
20140713下午练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
跳棋的挑战 |
最终得分 |
100 |
用户昵称 |
努力吧 |
运行时间 |
1.612 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2014-07-13 16:16:33 |
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("checker.in");
ofstream fo("checker.out");
int a[30];
int n,o=0;
void queen(unsigned row,unsigned ld,unsigned lr,unsigned i);
void pr(int r);
int main()
{
fi>>n;
queen(0,0,0,0);
fo<<o<<endl;
return 0;
}
void queen(unsigned row,unsigned ld,unsigned rd,unsigned i)
{
if(row==(1<<n)-1)
{
pr(i);
}
else
{
unsigned pos=~(row|ld|rd)&((1<<n)-1);
while(pos!=0)
{
unsigned p=pos&(-pos);
int s=0;
unsigned pl=p;
while(pl!=1)
{
s++;
pl=pl>>1;
}
a[i]=s+1;
pos=pos-p;
queen(row+p,(ld+p)<<1,(rd+p)>>1,i+1);
}
}
}
void pr(int r)
{
o++;
if(o<=3)
{
for(int i=0;i<=r-1;i++)
if(i!=r-1)
fo<<a[i]<<" ";
else
fo<<a[i];
fo<<endl;
}
}