H - Apple Tree-规律

路飞买了一个果园并决定在里面种苹果,这个矩阵是一个为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;
	
}

你可能感兴趣的:(H - Apple Tree-规律)