lightoj1010【规律】
思路:
根据案例的规律其实已经猜的差不多了,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; }