题目链接:
http://acm.fzu.edu.cn/problem.php?pid=2107
题意:
给你四个单位的物体,一个2*2的曹操,2*1的兵种,1*2的兵种,以及1*1的兵种,让你计算3*4,以及4*4的矩阵中,有且仅含有一个曹操,并且其他的随意放入,只要最终全部放满的总的次数。
一共只有4组案例,其实可以手动算答案(只要你不出错,真的!!!)
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define met(a,b) memet(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int maxn = 16+10;
/*int visited[maxn][maxn];
int n,m;
int flag;
int ans;
int go(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m&&!visited[x][y])
return true;
return false;
}
void dfs(int x)
{
if(x==4*n&&flag==1)
{
ans++;
return;
}
if(x>=4*n)
return;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(go(i,j)&&go(i+1,j)&&go(i,j+1)&&go(i+1,j+1)&&!flag)
{
flag=1;
visited[i][j]=visited[i+1][j]=visited[i][j+1]=visited[i+1][j+1]=1;
dfs(x+4);
visited[i][j]=visited[i+1][j]=visited[i][j+1]=visited[i+1][j+1]=0;
flag=0;
}
if(go(i,j)&&go(i+1,j))
{
visited[i][j]=visited[i+1][j]=1;
dfs(x+2);
visited[i][j]=visited[i+1][j]=0;
}
if(go(i,j)&&go(i,j+1))
{
visited[i][j]=visited[i][j+1]=1;
dfs(x+2);
visited[i][j]=visited[i][j+1]=0;
}
if(go(i,j))
{
visited[i][j]=1;
dfs(x+1);
visited[i][j]=0;
return;
}
}
}
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
m=4;
ans=0;
flag=0;
dfs(0);
printf("%d\n",ans);
}
}*/
int num[11]={0,0,18,284,4862};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%d\n",num[n]);
}
}