记录编号 |
36736 |
评测结果 |
AAAAAAAAAA |
题目名称 |
棋盘放車 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.547 s |
提交时间 |
2012-03-17 16:11:35 |
内存使用 |
16.27 MiB |
显示代码纯文本
#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;
}