路飞买了一个果园并决定在里面种苹果,这个矩阵是一个为N*M的二维矩阵,每个单位都可以选择去做种一个果树然后得到一个苹果,或者去施肥,施肥的土地不会zhang苹果,但是呢,它会使得它四周的果树上面的果子加倍。
路飞想知道他现在能够获得多少个果子。
当时脑子真是灌了铅了。。。大家都相出来了。。。我怎么早就没想到。。。只需要每隔一格子就放一个化肥,就好
1*1特判
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;
int map[105][105];
int n,m;
int dir[][2]={0,1,1,0,0,-1,-1,0};
__int64 cal(int i,int j)
{
__int64 ans=1;
for (int k=0;k<4;k++)
{
int x=i+dir[k][0];
int y=j+dir[k][1];
if (x>=1&&x<=n&&y>=1&&y<=m&&map[x][y]==1)
{
ans*=2;
}
}
return ans;
}
int main()
{
int t;
cin>>t;
while(t--)
{
memset(map,0,sizeof(map));
int j,i;
cin>>n>>m;
if (n==1&&m==1)
{
printf("1\n");
continue;
}
if (n>m)
swap(n,m);
for (i=1;i<=n;i++)
{
if (i%2==0) j=2;
else j=1;
for (;j<=m;j+=2)
map[i][j]=1;
}
__int64 sum=0;
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
if (map[i][j]==0)
{
sum+=cal(i,j);
}
}
}
printf("%I64d\n",sum);
}
return 0;
}