比赛 |
2024暑假C班集训A |
评测结果 |
AAAAAAAAAT |
题目名称 |
牧场的安排 |
最终得分 |
90 |
用户昵称 |
123 |
运行时间 |
2.415 s |
代码语言 |
C++ |
内存使用 |
3.50 MiB |
提交时间 |
2024-07-10 11:32:48 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=110,Mod=100000000;
struct node {
int x,y;
} a[N*N];
int n,m,tot=0,cnt=0,idx[N],head[N],nxt[N],flag[N][N];
long long ans=0;
void add(int x,int y)
{
idx[++cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
}
int check(int step)
{
for (int i=head[step];i;i=nxt[i])
{
int q=idx[i];
if (flag[a[q].x][a[q].y])
{
return 0;
}
}
return 1;
}
void dfs(int step)
{
if (step==tot+1)
{
ans++;
ans%=Mod;
return ;
}
dfs(step+1);
if (check(step))
{
flag[a[step].x][a[step].y]=1;
dfs(step+1);
flag[a[step].x][a[step].y]=0;
}
}
int main() {
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
int x;
scanf("%d",&x);
if (x)
{
a[++tot].x=i;
a[tot].y=j;
}
}
}
for (int i=1;i<=tot-1;i++)
{
for (int j=i+1;j<=tot;j++)
{
int l=abs(a[i].x-a[j].x),r=abs(a[i].y-a[j].y);
if (l==0 && r==1 || l==1 && r==0)
{
add(i,j);
add(j,i);
}
}
}
dfs(1);
printf("%lld",ans);
}