记录编号 366725 评测结果 AAAAAAAAAA
题目名称 [USACO 1.5.4] 跳棋的挑战 最终得分 100
用户昵称 GravatarMealy 是否通过 通过
代码语言 C++ 运行时间 1.873 s
提交时间 2017-01-25 18:07:40 内存使用 0.31 MiB
显示代码纯文本
//64
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>


using namespace std;

int n;
int cutline;
int ans=0;

int num=0;

int save[105];

void PreDo()
{
	scanf("%d",&n);
	cutline=(1<<n)-1;
//	printf("%d ",cutline);
}

void DFS(int unablerow,int unableslash,int unablebackslash,int floor)
{
//	printf("%d ",floor);
//	printf("%d ",unablerow);
	if(unablerow==cutline)
	{
		ans++;
		if(ans<=3)
		{
			for(int i=1;i<=n;i++)
			{
				printf("%d ",save[i]);
			}
			printf("\n");
		}
	}
	else
	{
		int ablepos=~(unablerow|unableslash|unablebackslash);
//		printf("%d ",ablepos);
		int becut=(ablepos&cutline);
//		printf("%d ",becut);
		while(becut)
		{
			int putpos=becut&(-becut);
//			printf("%d ",putpos);
			int tmpputpos=putpos;
			int tmppos=0;
			while(tmpputpos)
			{
				tmpputpos/=2;
				tmppos++;
			}
//			printf("%d ",tmppos);
			save[floor]=tmppos;
			becut-=putpos;
			DFS(unablerow+putpos,(unableslash+putpos)<<1,(unablebackslash+putpos)>>1,floor+1);
		}
	}
}

void Out()
{
	printf("%d\n",ans);
}

int main()
{
	freopen("checker.in","r",stdin);
	freopen("checker.out","w",stdout);
	PreDo();
	DFS(0,0,0,1);
	Out();
	return 0;
}