【分治法】输油管道问题

简介: 【分治法】输油管道问题

 问题描述:

问题描述:

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

编程任务:

  给定n 口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。

数据输入:

  由文件input.txt 提供输入数据。文件的第1 行是油井数n,1<=n10000。接下来n 行是油井的位置,每行2 个整数x 和y,-10000<=x,y<=10000 。

结果输出:

  程序运行结束时,将计算结果输出到文件output.txt 中。文件的第1 行中的数是油井到主管道之间的输油管道最小长度总和。

输入文件示例       输出文件示例

input.txt           output.txt

5                       6

1 2

2 2

1 3

3 -2

3 3

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
#define N 10000
bool cmp(int a,int b){
    return a<b;
}
int main()
{
    int n;cin>>n;
    int X=0, Y=0;//(X,Y)记录邮局位置
    int MinDis=0;
    int x[N],y[N];
    for(int i=0;i<n;i++){
        cin>>x[i]>>y[i];
    }
    sort(x,x+n,cmp);
    sort(y,y+n,cmp);
    X=x[n/2];Y=y[n/2];//邮局位置找法思想,两边之和大于第三边
    //将坐标两两分组,距离两点最近距离肯定在其两点间连线上,取交集即可;
    for(int i=0;i<n;i++){
        int dis1=x[i]-X;int dis2=y[i]-Y;
        if(dis1<0) dis1=-1*dis1;
        if(dis2<0) dis2=-1*dis2;
        MinDis=MinDis+dis2;
    //只需要y坐标距离差的绝对值(与邮局选址问题不同,此题为东西走向管道,不需考虑X坐标) 
    }
    cout<<MinDis<<endl;
    return 0;
}

image.gif


目录
相关文章
|
存储 缓存 Oracle
Oracle JDBC 驱动程序
开始使用 Oracle JDBC 驱动程序 (Doc ID 1602866.1
2401 0
|
计算机视觉 Python
Jetson 学习笔记(十):Picamera或者Jetcam打开树莓派CSI摄像头
本文介绍了在Jetson Nano上使用picamera和jetcam库打开树莓派CSI摄像头的方法。由于使用opencv获取CSI摄像头图像延迟高,作者推荐使用picamera,能达到20-30fps。文章提供了安装步骤、基础代码示例,并记录了一些有用的博客地址。
251 2
|
7月前
|
人工智能 自动驾驶 安全
什么是AGI
通用人工智能(AGI)指具备或超越人类智能的机器系统,能跨领域学习、推理和解决问题。其核心特点包括跨领域能力、自主学习与推理、类人思维模式及自适应性。目前AGI仍处早期阶段,但大模型和多模态技术正推动其从理论走向应用,如自动驾驶、科学研究和工业自动化等。尽管前景广阔,AGI仍面临技术瓶颈、伦理安全和资源需求等挑战。未来,AGI有望重塑产业和社会生活方式。
4971 2
|
12月前
|
算法 搜索推荐 数据挖掘
二分查找法的应用场景
【10月更文挑战第9天】
728 58
|
12月前
|
数据采集 Web App开发 JavaScript
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
本文介绍了如何使用Selenium爬虫技术抓取抖音评论,通过模拟鼠标悬停操作和结合代理IP、Cookie及User-Agent设置,有效应对动态内容加载和反爬机制。代码示例展示了具体实现步骤,帮助读者掌握这一实用技能。
539 0
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
|
数据安全/隐私保护
金盾金狮pbb爱问云点盾云加密视频录屏翻录提取教程
此软件专为录制加密网络课程视频设计,能轻松录制通常因加密而无法显示或录制的视频内容,并且录制过程隐蔽不被检测,输出文件为通用MP4格式。使用步骤简易:首先播放视频,然后打开软件并登录,即可开始录制。
2343 18
|
分布式计算 Hadoop Java
Hadoop添加环境变量
【7月更文挑战第16天】
517 3
如何在IDEA中创建Module、以及怎样在IDEA中删除Module?
这篇文章介绍了在IntelliJ IDEA中使用Module的原因、创建Module的步骤以及如何从硬盘上删除Module。
如何在IDEA中创建Module、以及怎样在IDEA中删除Module?
抖音超火的圣诞树代码,html源码分享
抖音超火的圣诞树代码,html源码分享
2231 0
|
XML Java 程序员
Java一分钟之-AOP:面向切面编程
【6月更文挑战第13天】Java中的AOP允许程序员定义切面,将日志、事务等通用功能与业务逻辑解耦。切面包括通知(Advice,如前置、后置等)和切入点(Pointcut,定义执行点)。Spring框架通过代理和@AspectJ注解支持AOP。常见问题包括代理对象理解错误、切入点表达式错误、环绕通知处理不当和配置遗漏。理解和实践中,AOP能提升代码可维护性和可扩展性。
460 5