1 条题解

  • 0
    @ 2026-4-13 19:32:28

    题目翻译与重述

    一块砖是一个大小为 1×k1 \times k 的长条,可水平或竖直放置,其中 k2k \ge 2
    一个 n×mn \times m 的砖墙是用若干砖铺满矩形,每块砖完全在单元格内,每个单元格恰属于一块砖。
    稳定性定义为 水平砖的数量 减去 竖直砖的数量
    求对于给定的 n,mn, m,墙的最大可能稳定性。


    题解

    我们希望在满足 k2k \ge 2 的条件下,尽可能多地使用水平砖,且尽可能少地使用竖直砖,以最大化 水平砖数 - 竖直砖数

    关键观察 1
    由于每块水平砖至少占用一行中的 22 个连续格子,单独一行长度为 mm 时,该行能容纳的水平砖数量最多为 m/2\lfloor m/2 \rfloor。因此整个矩形的水平砖数量上界为

    nm2.n \cdot \left\lfloor \frac{m}{2} \right\rfloor.

    若能达到该上界且竖直砖数量为 00,则稳定性即为该上界。

    关键观察 2
    任意 m2m \ge 2 均可以表示为若干个 2233 的和(因为除了 11 以外,所有整数都能用 2233 组合出来)。
    因此对于任意一行,我们总可以仅用长度为 2233(或更大)的水平砖将其完全填满,且水平砖数量恰好为 m/2\lfloor m/2 \rfloor

    • mm 为偶数时,全用 1×21 \times 2 砖,数量为 m/2m/2
    • mm 为奇数时,使用 1×31 \times 3 砖与 1×21 \times 2 砖组合,例如 m=9m=9 时用 33221133,数量为 4=9/24 = \lfloor 9/2 \rfloor

    构造方案
    对每一行独立进行上述水平砖的填充,整个矩形便可完全由水平砖覆盖,竖直砖数量为 00。此时水平砖总数为 nm/2n \cdot \lfloor m/2 \rfloor,稳定性达到最大值。

    结论
    最大稳定性即为

    nm2.n \cdot \left\lfloor \frac{m}{2} \right\rfloor.

    时间复杂度 O(1)O(1) 单次询问,足以通过 t104t \le 10^4 的数据范围。


    参考代码(C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        
        int t;
        cin >> t;
        while (t--) {
            int64_t n, m;
            cin >> n >> m;
            cout << n * (m / 2) << '\n';
        }
        return 0;
    }
    
    • 1

    信息

    ID
    6511
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者