题意: 求能放的最多的马的数量。
思路: 数学题,分情况讨论。
AC代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f
using namespace std;
const int maxn=20010;
int main(){
int t; scanf("%d",&t);
for(int cas=1; cas<=t; cas++) {
int m,n;
scanf("%d%d",&n,&m);
printf("Case %d: ",cas);
if(m==1) {
printf("%d\n",n); continue;
}
if(n==1) {
printf("%d\n",m); continue;
}
int x=min(n,m),y=max(n,m);
if(x==2) { //被2坑了,考虑2的情况下还要考虑y/2是否为奇数。。。。。。。。。
int f=0;
int z=y/2; if(z&1) f=1;
int c=z*2; z=(z+1)/2*4;
if(f) printf("%d\n",z);
else
z=z+(y-c)*2,
printf("%d\n",z);
continue;
}
if(m%2==0) {
printf("%d\n",n*(m/2));
}else {
int z=((m+1)/2 )* ((n+1)/2);
z=z+((m/2) * (n/2));
printf("%d\n",z);
}
}
return 0;
}