[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;
}

相关文章: