1 条题解

  • 0
    @ 2026-1-27 19:40:01
    #include <bits/stdc++.h>  
    using namespace std;    
    
    int main() {
        // 问题分析:输入3个平面坐标点,计算连通这3个点所需清理的最少方格数
        // 解题步骤:先遍历3个点找到横、纵坐标的最大/最小值,再通过坐标极值差计算结果,核心思路是路线可平移至边缘,最少方格数由坐标极值决定
        
        int max_h=0,max_l=0,min_h=2000,min_l=2000,a,b;
        // [1]max_h-3个点的最大横坐标;[2]max_l-3个点的最大纵坐标
        // [3]min_h-3个点的最小横坐标(初始2000,确保能被更小的坐标更新)
        // [4]min_l-3个点的最小纵坐标(初始2000,确保能被更小的坐标更新)
        // [5]a-临时存储每个点的横坐标;[6]b-临时存储每个点的纵坐标
        
        // 遍历3个输入的坐标点,更新横、纵坐标的极值
        for(int i=1;i<=3;i++){
            cin>>a>>b;         // [7]读取当前点的横、纵坐标
            max_h = max(max_h,a);  // [8]更新最大横坐标,取已有最大值与当前点横坐标的较大值
            max_l = max(max_l,b);  // [9]更新最大纵坐标,取已有最大值与当前点纵坐标的较大值
            min_h = min(min_h,a);  // [10]更新最小横坐标,取已有最小值与当前点横坐标的较小值
            min_l = min(min_l,b);  // [11]更新最小纵坐标,取已有最小值与当前点纵坐标的较小值
        }
        
        // 计算并输出最少清理方格数:横向(含起止点)+纵向,即为连通3个点的最小方格数
        cout<<max_h-min_h+1 + max_l-min_l;  // [12]max_h-min_h+1是横向覆盖方格数,max_l-min_l是纵向覆盖方格数,两者和为结果
        return 0; 
    }
    
    • 1

    信息

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