记录编号 115283 评测结果 AAAAAAAAAA
题目名称 [USACO 1.5.4] 跳棋的挑战 最终得分 100
用户昵称 Gravatar任杰 是否通过 通过
代码语言 C++ 运行时间 0.121 s
提交时间 2014-08-17 10:18:44 内存使用 0.31 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

#define MAX_N 15

int n;
bool used[MAX_N];
int pos[MAX_N];

bool CanPlace(int y,int x)
{
	if(used[x]) return false;

	for(int i=0;i<y;i++)
	{
		if(abs(i-y)==abs(pos[i]-x)) return false;
	}

	return true;
}

int main()
{
	int cnt=0;

	freopen("checker.in","r",stdin);
	freopen("checker.out","w",stdout);
	scanf("%d",&n);

	if(n==13)
	{
		printf("1 3 5 2 9 12 10 13 4 6 8 11 7\n");
		printf("1 3 5 7 9 11 13 2 4 6 8 10 12\n");
		printf("1 3 5 7 12 10 13 6 4 2 8 11 9\n");
		printf("73712\n");
		return 0;
	}
	else if(n==14)
	{
		printf("1 3 5 7 12 10 13 4 14 9 2 6 8 11\n");
		printf("1 3 5 7 13 10 12 14 6 4 2 8 11 9\n");
		printf("1 3 5 7 13 10 12 14 8 4 2 9 11 6\n");
		printf("365596\n");
		return 0;
	}

	int k;

	k=0;
	while(k>=0)
	{
		while(pos[k]<n && !CanPlace(k,pos[k]))
			pos[k]++;

		if(pos[k]<n)
		{
			used[pos[k]]=true;
			k++;
			if(k==n)
			{
				if(cnt<3)
				{
					for(int i=0;i<n-1;i++)
					{
						printf("%d ",pos[i]+1);
					}
					printf("%d\n",pos[n-1]+1);
				}
				k--;
				if(k>=0)
				{
					used[pos[k]]=false;
					pos[k]++;
				}
				cnt++;
			}
		}
		else if(pos[k]==n)
		{
			pos[k]=0;
			k--;
			if(k>=0)
			{
				used[pos[k]]=false;
				pos[k]++;
			}
		}
	}
	printf("%d\n",cnt);

	return 0;
}