思路:
根据案例的规律其实已经猜的差不多了,answer=n*m/2;
有一条边是1的情况,也很好判断,answer=n*m;
就是有一条边是2的时候比较隐秘:是连续2*2一块可以填,然后2*2不填,没想出总结的公式,就直接模拟了。
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
int main()
{
int cas=1,T;
int n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
int ans=(n*m+1)/2;
if(n==1||m==1)
ans=n*m;
else if(n==2||m==2)
{
ans=0;
n=n*m;
while(n>8)
{
ans+=4;
n-=8;
}
if(n>=4)
ans+=4;
else
ans+=n;
}
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}