记录编号 111801 评测结果 AAAAAAAAAA
题目名称 [USACO 1.5.4] 跳棋的挑战 最终得分 100
用户昵称 Gravatarchs 是否通过 通过
代码语言 C++ 运行时间 1.503 s
提交时间 2014-07-14 09:24:06 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=20;
int n,way[maxn],c;
int num=1;
void put(unsigned int s,unsigned int l,unsigned int r)
{
	if(num>n){
		c++;
		if(c<=3){
			for(int w=1;w<=n;w++) cout<<way[w]<<" ";
			cout<<endl;}
		return ;}
	unsigned int p;
	p=~(s|l|r);
	p=p&(1<<n)-1;
	while(p){
		unsigned int x=p&(-p);
		p=p-x;
		unsigned int y=x;
		for(;;){
			way[num]++;
			if(y&1) break;
			y=y>>1;
		}
		num++;
		put(s+x,(l+x)<<1,(r+x)>>1);
		num--;
		way[num]=0;
	}
}
int main()
{
    freopen("checker.in","r",stdin);
    freopen("checker.out","w",stdout);
	cin>>n;
	put(0,0,0);
	cout<<c<<endl;
	return 0;
}