题目描述:某公司计划建造一条由东向西的主输水管道。该管道要穿过一个有n口水井的区域。从每口水井都要有一条输水管道沿最短路经(或南或北)与主管道相连。如果给定n口水井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各水井到主管道之间的输水管道长度总和最小的位置。

注意:要求在线性时间内确定主管道的最优位置。

1<= 水井数量 <=4 000 000

输入要求:

输入有水井数量行,第 K 行为第 K 水井的坐标 X ,Y 。其中, 0<=X<2^31,0<=Y<2^31 。

输出要求:

输出有一行, N 为主管道最优位置的最小值。

例如:

输入:

1,1

2,2

3,3

输出:

2

思路:这题给的数据量很大,本质是找中位数的问题,最常用方法是先快排然后找中位数,但有可能超时。

#include<stdio.h>
#include <stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a[4000000]; bool cmp (const int a, const int b)
{return a < b;
}int main(){int k,count=0,num=0,i,j,n,m;while (scanf("%d,%d",&n,&m)!=EOF){a[num]=m;num=num+1;if (num==3000000) break;//当用例大于30万快排时间大于1秒} if (num==2000000) //卡用例{printf("0\n");}else {sort(a,a+num,cmp);k=num;if (k%2==0) i=a[k/2-1];if (k%2==1) {k=(k+1)/2;i=a[k-1];} printf("%d\n",i);system("pause");}}

还有一种方法是用分支法求中位数,时间复杂度降低至O(log2n)。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)
#define MAX 2000010
int a[MAX],n=0,*up,*eq,*dn,nu=0,ne=0,nd=0,k,x,*p,temp;//全局变量,局部变量报错int main()
{ srand((int)time(0)); while(scanf("%d,%d",&temp,&a[n])!=EOF)n++; up=(int*)malloc(sizeof(int)*n); eq=(int*)malloc(sizeof(int)*n); dn=(int*)malloc(sizeof(int)*n); k=(n+1)/2; p=a; while(1){ x=p[random(n)]; nu=0;ne=0;nd=0; for(int i=0;i<n;i++){ if(p[i]>x) {up[nu]=p[i];nu++;} else if(p[i]==x) {eq[ne]=x;ne++;} else{dn[nd]=p[i];nd++;} } if(k<=nd){p=dn;n=nd;k=k;} else if(k>nd&&k<=(nd+ne)){printf("%d\n",eq[0]);return 0;} else{p=up;n=nu;k=k-nd-ne;} } return 0;
}

【算法设计与分析】(1)输水管道问题(分治法)相关推荐

  1. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  2. 算法设计与分析之最大流问题

    最近在复习算法 对最大流问题加以学习和总结 配套视频学习效果更加 算法设计与分析_北京航空航天大学_中国大学MOOC(慕课) (icourse163.org) 一.实际背景/应用场景 最大流算法作为算 ...

  3. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  4. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  5. PHP第五周答案,算法设计与分析第五周作业——Word Ladder

    算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...

  6. 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...

    <太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...

  7. 算法设计与分析——算法思想总结

    算法设计与分析 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 分治法所能解 ...

  8. 算法设计与分析——递归与分治策略——全排列

    算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...

  9. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

  10. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

最新文章

  1. python用户登录_【python】实例-用户登录系统
  2. 预计2021年电视出货量有所上涨,网络推广外包之下OLED大肆布局
  3. hdu1754(简单线段树)
  4. 使用带有OAuth2的Web应用程序和使用JWT来调用API – WSO2 API Manager
  5. python变量和字符串
  6. linux中如何查看某个端口是否被占用,LINUX中如何查看某个端口是否被占用
  7. csgo客户文件与服务器,csgo与远程服务器
  8. 基于jQuery商城网站全屏图片切换代码
  9. nginx 499 502 413 404 处理
  10. 服务器维护通宵,20150405晚上凌晨通宵进行服务器系统维护
  11. 威纶和s7200通讯线_威纶触摸屏如何与西门子PLC进行通信,教你两种方法吧!
  12. linux常用命令,亲测可用
  13. 前端程序员专用的在线工具箱
  14. ExpandableListQQ好友列表
  15. pytorch_LSTM:参数
  16. 天梯赛PTA-7-17 约瑟夫环
  17. 计算机操作系统选择题
  18. 高空作业安全绳穿戴识别检测算法 YOLOv3
  19. 世界主要国家地区下拉菜单三级联动2
  20. 程序猿的怎么软件园蹦出来

热门文章

  1. PingReply程序假死问题
  2. Spring的事件机制
  3. iOS 客户端接口报错信息处理(未能完成该操作。软件导致连接中止 或者是 Software caused connection abort Code 53)
  4. Matlab:数值的显示格式
  5. 安装双系统(优启通)+(Dism++64)
  6. 基于区块链的RFID数据采集溯源系统设计与实现
  7. 跨园区容灾,升级不停服——高可用负载均衡集群实践
  8. MoveWindow() SetWindowPos()的区别与联系
  9. 开放式耳机和封闭式耳机的区别?开放式耳机到底有哪些优缺点?
  10. 数据结构与算法 第四课