博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
能被15整除的最大整数
阅读量:6180 次
发布时间:2019-06-21

本文共 1077 字,大约阅读时间需要 3 分钟。

油井问题

成绩: 5 / 折扣: 0.8

题目见教材P41.2-1

1<= 油井数量 <=2 000 000

输入要求:

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

输出要求:

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

 

 

解:

 

其实就是求中位数,X坐标是不要用的,算法书上到处都有,直接贴代码:

#include 
#include
#define MAX 2000002long a[MAX];int partition(long p,long r){ long i = p, j = r + 1, x = a[p], temp; while (1) { while (a[++i] < x && i < r); while (a[--j] > x); if (i >= j) break; temp = a[i]; a[i] = a[j]; a[j] = temp; } a[p] = a[j]; a[j] = x; return j;}long random(long p,long r){ long temp, i = (rand() % (r + 1 - p)) + p; temp = a[i]; a[i] = a[p]; a[p] = temp; return partition(p, r);}long select(long p, long r,long k){ long i, j; if(p == r) return a[p]; i = random(p,r); j = i - p + 1; if(k <= j) return select(p,i,k); else return select(i + 1,r,k - j);} int main(){ long num = 0,temp; while(scanf("%ld,%ld",&temp,&a[num] )!=EOF) num = num + 1; if(num%2 == 0) temp = num/2+1; else temp = num/2+2; printf("%d\n",select(0,num,temp)); system("pause"); return 0;}

转载于:https://www.cnblogs.com/kiwi/archive/2012/03/22/2412329.html

你可能感兴趣的文章
PHP中类的使用,面向对象的思路
查看>>
istio 0.8 安装步骤
查看>>
Linux /Var/log 日志文件详解
查看>>
年薪六十万,你还缺些什么
查看>>
[转载] 中国好声音 120817
查看>>
Monte Carlo tree search 学习
查看>>
使用golang的slice来模拟栈
查看>>
【计算机网络】TCP关闭连接问题及注意
查看>>
【评分】第四次作业--项目选题报告(团队)
查看>>
增加wamp64 PHP支持版本
查看>>
重复枚举和不重复枚举
查看>>
64位Window操作系统下,Orcal数据访问服务器端和客户端版本对应与通讯问题
查看>>
Android 获取当前日期距离过期时间的日期差值的完整方法直接使用
查看>>
linux tar 增量备份命令
查看>>
sql_游标总结 转
查看>>
使用纯css做一个播放器
查看>>
C语言程序设计_zju——第5周编程练习_素数和_念整数
查看>>
前端 搜索样式 html
查看>>
[CF773D]Perishable Roads
查看>>
[POI2008]Mirror Trap
查看>>