【Codeforces Round #645 (Div. 2) A】 Park Lighting
【题目翻译】
其实就是让你用一个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\n",cnt);
}
return 0;
}