[CF1034B] Little C Loves 3 II - 构造
Description
给定一个(n imes m)的棋盘,每次可以在上面放一对棋子 ((x,y),(x',y')),要求(mid x-x‘mid+mid y-y’mid=3),问最多可以放多少个棋子
Solution
分类讨论,假设 (n le m)
对 (n=1),以 (6) 为循环节,讨论余数即可
对 (n=2),很容易构造出 (m=4,5) 的满解,因此 (8) 以上一定都是满的;而 (6) 又可以拆成两个满行,所以特判 (1,2,4,7) 即可
对 (nge 3),最多只会剩下一个格子(当 (nm) 为奇数的情况),否则一定可以填满
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
if (n > m)
swap(n, m);
if (n == 1)
cout << m / 6 * 6 + 2 * (m % 6 > 3 ? m % 6 - 3 : 0);
else if (n == 2)
{
if (m <= 2)
cout << 0 << endl;
else if (m == 3)
cout << 4 << endl;
else if (m == 7)
cout << 12 << endl;
else
cout << m * 2 << endl;
}
else
cout << n * m / 2 * 2 << endl;
}