比赛 20150711暑期B班 评测结果 AAAAAAAAAA
题目名称 跳棋的挑战 最终得分 100
用户昵称 NVIDIA 运行时间 0.777 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2015-07-11 10:40:04
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

int lowbit(int num)
{
	return(-num&num);
}
int n,full,c,rec[20];
int dfs(int deep,int x,int y,int z)
{
	if((x&full)==full)
	{
		if(c<3)
		{
			for(int i=1;i<n;i++)
				cout<<rec[i]<<' ';
			cout<<rec[n]<<endl;
		}
		c++;
		return 0;
	}
	
	int temp,pos,now=(x|y|z);
	temp=(~now)&full;
	while (temp)
	{
		pos=lowbit(temp);
		temp-=pos;
		if(c<3)
			rec[deep]=log(pos*1.0)/log(2.0)+1;
		dfs(deep+1,x|pos,(y|pos)<<1,(z|pos)>>1);
	}
	return 0;
}

int main()
{  
	freopen("checker.in","r",stdin);
    freopen("checker.out","w",stdout);
	cin>>n;
	full=(1<<n)-1;
	dfs(1,0,0,0);
	cout<<c<<endl;
	return 0;

}