1 条题解
-
0
#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
- 上传者