比赛 20120316 评测结果 AAAAAAATTT
题目名称 棋盘放車 最终得分 70
用户昵称 Yeehok 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-16 21:52:22
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
int N,M;
unsigned long long Ans=0;
int hang[31];
int flag[31][31];
bool Check(int k,int j)
{
	if(flag[k][j])
		return (false);
	for(int i=1;i<=N;i++)
	{
		if(hang[i]==j)
			return (false);
	}
	return (true);
}

int main(void)
{
	freopen("examone.in","r",stdin);
	freopen("examone.out","w",stdout);
	scanf("%d%d",&N,&M);
	memset(hang,0,sizeof(hang));
	memset(flag,0,sizeof(flag));
	int a,b;
	for(int i=1;i<=M;i++)
	{
		scanf("%d %d\n",&a,&b);
		flag[a][b]=1;
	}
	int i=1,j=1;
	while(i<=N)
	{
		while(j<=N)
		{
			if(Check(i,j))
			{
				hang[i]=j;
				j=1;
				break;
			}
			else
			{
				j++;
			}
		}
		if(!hang[i])
		{
			if(i==1)
			{
				printf("%lld\n",Ans);
				return(0);
			}
			else
			{
				i--;
				j=hang[i]+1;
				hang[i]=0;
				continue;
			}
		}
		if(i==N)
		{
			Ans++;
			j=hang[i]+1;
			hang[i]=0;
			continue;
		}
		i++;
	}
	return (0);
}