1 条题解

  • 0
    @ 2025-4-9 22:22:18

    题意分析

    题目要求计算两个机械表面接触后剩余的空格总数("空隙")。每个图像有2525列,由"XX"和"空格空格"组成:

    • 左侧表面从第11列开始向右延伸
    • 右侧表面从第2525列开始向左延伸
    • 中间可能存在空格分隔 接触后,左右表面会水平移动直到某一行接触,此时需要计算所有行中剩余的空格总数。

    解题思路

    1. 对每行计算空格数nLineSpaceCountnLineSpaceCount
    2. 找出所有行中的最小空格数nMinLineSapcenMinLineSapce
    3. 总空隙 = 所有行空格总数 - (NN × 最小行空格数)
    4. 因为接触后每行会移动最小空格数的距离,所以剩余空格为各行空格数与最小值的差之和

    实现步骤

    1. 读取图像行数NN
    2. 对每行: a) 统计该行空格数 b) 更新最小空格数
    3. 计算总空隙 = i=1N(spacei)N×min_space\sum_{i=1}^{N}(space_i) - N × min\_space
    4. 输出结果

    C++实现

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    #define STRING_LEN 26
    char szInputMsg[STRING_LEN] = {0};
    
    int main()
    {
        int N;
        while((cin >> N) && N)
        {
            cin.get();  // 去除'\n'
            int nTotalSapce = 0;
            int nMinLineSapce = STRING_LEN;
            for (int nLine = 0; nLine < N; ++nLine)
            {
                cin.getline(szInputMsg, STRING_LEN);
                int nLineSpaceCount = 0;
                for (int nIndex = 0; nIndex < STRING_LEN - 1; ++nIndex)
                {
                    if (szInputMsg[nIndex] == ' ')
                        ++nLineSpaceCount;
                    else if (nLineSpaceCount > 0)
                        break;
                }
                nTotalSapce += nLineSpaceCount;
    
                if (nLineSpaceCount < nMinLineSapce)
                    nMinLineSapce = nLineSpaceCount;
            }
            cout << nTotalSapce - (N * nMinLineSapce) << endl;
        }
        return 0;
    }
    

    代码说明

    1. 输入处理

      • 使用cin.get()cin.get()处理换行符
      • 每行读取到szInputMsgszInputMsg数组中
    2. 空格统计

      • 遍历每行字符,统计连续空格数nLineSpaceCountnLineSpaceCount
      • 遇到非空格字符时停止统计
    3. 关键计算

      • 维护最小空格数nMinLineSapcenMinLineSapce
      • 最终空隙 = nTotalSapce(N×nMinLineSapce)nTotalSapce - (N × nMinLineSapce)
    4. 复杂度分析

      • 时间复杂度:O(N×25)O(N×25)
      • 空间复杂度:O(1)O(1)
    5. 注意事项

      • 行数NN范围:1N121 ≤ N ≤ 12
      • 每行固定2525个字符
      • 使用STRING_LEN=26STRING\_LEN=26包含字符串结束符
    • 1

    信息

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