【题目翻译】
其实就是让你用一个1*2(可以缩小为1*1)的方块去填充整个n*m的方格。 问你最少需要多少个方格。【题解】
如果长和宽某一个是偶数,那么显然可以让长为2的边顺着那个方向摆放。刚好需要(n/2*m)个,也即(n*m/2)
如果都是奇数的话,我们可以截出来一个长度为奇数的,宽为1的一列,然后让那一列竖着填。
即((n-1)/2+1)个,然后剩下的(n*(m-1))的,m-1肯定是偶数,所以答案是((m-1)/2*n)
总计((n-1)/2+1+(m-1)*n/2=(n*m+1)/2).
所以直接输出((n*m+1)/2)就好,向下取整。
不过写的时候没想那么多。就直接贪了。
【代码】
#include<bits/stdc++.h>
#define ll long long
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
using namespace std;
int n,m;
int main(){
#ifdef LOCAL_DEFINE
freopen("D:\rush.txt","r",stdin);
#endif
int T;
rei(T);
while (T--){
rei(n);rei(m);
int cnt = 0;
if (m&1){
cnt += n/2;
if(n&1) cnt++;
m--;
}
cnt += n*(m/2);
printf("%d
",cnt);
}
return 0;
}