题解 CF142B 【Help General】
SIGSEGV
2019-02-23 21:09:34
首先,为了方便处理,因此要使$n > m$。先加入代码
`if (n < m) swap(n,m);`
大力分类讨论:
当m=1时(棋盘只有一行),放满;
当m=2时,按照田字格放;(即放4个空4个),看上去像这样(1:放 0:不放)
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: |
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
当m>2时,隔一个位置放一个,如
| 1 | 0 |1 |
| -----------: | -----------: | -----------: |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
(按照国际象棋中的黑白格放)
上代码
```cpp
#include <bits/stdc++.h>
using namespace std;
int n,m;
int main ()
{
scanf("%d%d",&n,&m);
if (n < m) swap(n,m);
if (n == 1 || m == 1) printf("%d\n",n * m); //m=1
else if ((n == 2 || m == 2) && n * m != 2) //m=2
{
if (n % 4 == 0) printf("%d\n",n);
if (n % 4 == 3) printf("%d\n",n + 1);
if (n % 4 == 2) printf("%d\n",n + 2);
if (n % 4 == 1) printf("%d\n",n + 1);
}
else printf("%d\n",(1 + n * m) / 2); //m>2
return 0;
}
```