比赛 20120316 评测结果 AAAAAAAAAA
题目名称 棋盘放車 最终得分 100
用户昵称 QhelDIV 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-17 16:16:21
显示代码纯文本
#include <fstream>
using namespace std;
ifstream fin("examone.in");
ofstream fout("examone.out");
unsigned long long f[1048579];
unsigned long long r,Rule[1048579];
int n,t,m,X[500],Y[500];
int flag[31];
void Initialize()
{
int i,j;
	r=1;
	for(i=1;i<=n;i++)
	{
		for(j=r;j<=r*2;j++)
			Rule[j]=i;
		r*=2;
	}
	for(i=0;i<=30;i++)
		flag[i]=0xFFFFFFF;
	for(i=1;i<=m;i++)
	{
		fin>>X[i]>>Y[i];
		flag[Y[i]]^=1<<(X[i]-1);
	}
}

int main()
{
unsigned long long i,j;
int x=0;
	f[0]=1;
	fin>>n>>m;
	Initialize();
	for(i=1;i<=r;i++)
	{
		x=0;
		for(j=i;j>=1;j=j-(j&-j))
			x++;
		for(j=i;j>=1;j=j-(j&-j))
			if( ((j&-j)&flag[x]))
				f[i]+=f[i^(j&-j)];
	}
	fout<<f[r-1]<<endl;
	
	fin.close();
	fout.close();
	return 0;
}