[CF1034B] Little C Loves 3 II - 构造
Description
给定一个\(n\times 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\) 即可
对 \(n\ge 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;
}