[CF1034B] Little C Loves 3 II

[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;
}
原文地址:https://www.cnblogs.com/mollnn/p/14676644.html