1 条题解

  • 0
    @ 2025-12-4 20:58:06

    问题分析

    本题要求在一个 x×y×zx \times y \times z 的三维网格图中,找到一条最短路径使得机器人遍历所有边至少一次。这是一个典型的欧拉路径/回路问题(中国邮递员问题的特例)。

    关键结论

    对于三维网格图:

    1. 图中的奇度数顶点(度数为奇数的点)个数只能是 0022
    2. 当奇点数为 00 时,存在欧拉回路
    3. 当奇点数为 22 时,存在欧拉路径
    4. 无论是欧拉回路还是欧拉路径,覆盖所有边恰好一次所需的步数都等于图中的总边数

    边数计算公式

    三维 x×y×zx \times y \times z 网格的总边数为:

    $$E = (x-1)yz + x(y-1)z + xy(z-1) = 3xyz - (xy + xz + yz) $$

    其中:

    • (x1)yz(x-1)yzxx 方向的边
    • x(y1)zx(y-1)zyy 方向的边
    • xy(z1)xy(z-1)zz 方向的边

    最终答案

    机器人所需的最小能量即为总边数:

    ans=3xyz(xy+xz+yz)\text{ans} = 3xyz - (xy + xz + yz)

    需要对结果取模 998244353998244353

    C++ 实现

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const ll MOD = 998244353;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        
        int t;
        cin >> t;
        
        while (t--) {
            ll x, y, z;
            cin >> x >> y >> z;
            x %= MOD;
            y %= MOD;
            z %= MOD;
            
            ll xyz = (x * y % MOD) * z % MOD;
            ll xy = x * y % MOD;
            ll xz = x * z % MOD;
            ll yz = y * z % MOD;
            
            ll ans = (3 * xyz % MOD - (xy + xz + yz) % MOD + MOD) % MOD;
            cout << ans << "\n";
        }
        
        return 0;
    }
    

    算法标签

    • 图论 - 欧拉路径/回路
    • 组合数学 - 网格图计数
    • 公式推导 - 直接公式计算
    • 模运算 - 大数取模处理
    • 1

    信息

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