一篇关于用C++解《洛谷 P1862 输油管道问题》这道题的题解

卷首语

今天是2022年8月15日,我无聊,就发了这个题解,希望能帮助大家。我个人是一个初中生,准备参加CSP-J,在复习中,发现了这道题,分享给大家。我写的可能不是很好,让大家见笑了。在此我要说明一点,我用的代码是C++语言的。

题目简介

点击下方蓝色字即可查看

《洛谷 P1862 输油管道问题》原题网站

题目背景

听说最近石油危机所以想到了这题

题目描述

某石油公司计划建造一条由东向西的主要输油管道。
该管道要穿过一个有n口油井的油田。
从每口油井都要有一条输油管道沿最短路径(或南或北)与主管道相连。
如果给定n口油井的位置,
及它们的x坐标(东西向)和y坐标(南北向),
应如何确定主管道的最优位置,
即使各油井到主管道之间的输油管道长度总和最小的位置?
证明可规定时间内确定主管道的最优位置。

输入格式

第一行是油井数n(1<=n<=10000)接下来n行是油井的位置,每行2个整数x和y(-10000<=x,y<=10000)

输出格式

只有一行是油井到主管道之间的输油管道最小长度总和

输入样例

5
1 2
2 2
1 3
3 -2
3 3

输出样例

6

题目分析

从题目可以看出,这题根本与横坐标(x轴)没有太大关系,但这并不意味不需要横坐标,因为输入时还是需要横坐标的(在我的代码第37行我有一个小技巧,这样就不需要存储横坐标了)。我们在做之前可以缩小一下数据,比如说我们先只有一个油井——(3, 3)。我们只需要把主管道经过这个油井就可以了。接下来慢慢增加数据,并进行找规律。在这时候,我建议你自己画一张坐标图(建议在电脑上,这样更方便),让你更清晰地理解题目,我这里为了抓紧时间,就不把图发出来了。在找规律的过程中,你就会发现:如果这些油田是按顺序输入的,会是否方便。这就意味着,我们就应该进行排序。具体内容请看代码。

代码

# include <bits/stdc++.h>
# define MAX (10005)using namespace std;/*
文件名:petroleum
题目:洛谷 P1862 输油管道问题
题目网址:https://www.luogu.com.cn/problem/P1862输入:
5
1 2
2 2
1 3
3 -2
3 3
输出:
6
*/bool cmp(int x, int y) {return x < y;
}int main() {//  freopen("petroleum.in", "r", stdin);
//  freopen("petroleum.out", "w", stdout); int n, i, j,sum,a[MAX];  //a[0..n-1]。第i口油井的纵坐标在a[i]//输入数据 cin >> n;for (i = 0; i <= n - 1; i ++ ) {cin >> a[i];   //横坐标说没有用的,可以直接抛弃掉 cin >> a[i];}//排序 sort(a, a + n, cmp);//两端对称取长短。中位数原理。 for (sum = 0, i = 0, j = n - 1; i <= j; i ++ , j -- ) {sum += a[j] - a[i];}cout << sum << endl;return 0;
}

卷末语

这题的思路非常灵活,所以请各位注意一下几点:

1.认真读题。对照的题目,把相应的数据标在一张坐标图上面

2.缩小数据,从最简单的数据出发去研究。

3.针对自己给出来的初步解决方案,适当地把数据的规模和样本放大一点,从多个角度尝试着修改一下数据,来验证一下自己给出的这个解决方案是否正确,是否能够应对所有的局面。

4.认真编程,确保自己的代码和自己大脑中的解决方案是一致的。

我个人是当天在洛谷上提交的,10个测试点都AC了,所以这个代码也Accepted了。我个人认为这个代码应该没有问题。

如果您在阅读的过程中,发现问题,请在留言区指出不足,我会真心感谢您的指教。在此,谢谢各位观看我的题解!

洛谷 P1862 输油管道问题相关推荐

  1. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  2. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  3. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  4. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  5. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  6. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  7. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

  8. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  9. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

最新文章

  1. 更改mvc版本的时候,手动修改交3.0改到4.0,将razor改到2.0,仍然提示出现错误,mvc3.0...
  2. C/C++变量存储区域
  3. 文件系统磁盘管理(七)--RAID
  4. ARC下的所有权修饰符
  5. vmware workstation 8上面装vsphere5
  6. leetcode145. 二叉树的后序遍历
  7. 构建插件式的应用程序框架(一)----开篇
  8. linux svn 设置propertise
  9. 自动生成html_服务搭建篇二·Jenkins+Jmeter+Gitlab持续集成实现接口流程自动化
  10. 反编译获取微信小程序源码
  11. phpStudy启动失败时的解决方法 提示缺vc9运行库
  12. 【手撕算法】PatchMatch图像修复算法C++实现
  13. BCM业务连续性管理
  14. 【Python】完美采集淘宝数据(附完整源代码和视频教程)
  15. 朋友圈gys是什么意思,女生微信朋友圈说说经典句子
  16. 软件测试丨工具在接口测试中发挥什么样的作用?
  17. 【Mybatis从入门到实战教程】第一章 Mybatis 入门
  18. php laravel 教程,Laravel框架学习之新手教程
  19. 网线的制作方法及步骤
  20. 博德之门 linux x32,GOG.com

热门文章

  1. 控油,真的可以缓解脂溢性脱发么?
  2. html5中心开班信息,思途2103UIHTML5开班——新开始,新收获
  3. 10.数据库-Matplotlib
  4. Ajax跨域请求时出现Access to XMLHttpRequest at ‘xxx‘ from origin ‘xxx‘ has been been blocked by CORS policy
  5. et文件转Word的操作方法
  6. css3 实现圆角的三角形
  7. Problem F: 尖兵
  8. 数据结构的六大排序算法详解
  9. idea看java版本设置_详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用)...
  10. Power BI—导出数据