隐形的翅膀

背景

小杉终于进入了天堂。他看到每个人都带着一双隐形翅膀,他也想要。

(小杉是怎么看到的?……)

描述
天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美。
现在天使给了小杉N只翅膀,小杉想挑出一对最完美的。
格式

输入格式
每组测试数据的
第一行有一个数N(2<=N<=30000)
第二行有N个不超过1e5的正整数,表示N只翅膀的长度。

20%的数据N<=100

输出格式
对每组测试数据输出两个整数,表示小杉挑选出来的一对翅膀。
注意,比较短的在前,如果有多对翅膀的完美程度一样,请输出最小的一对。
样例1

样例输入1
4
2 3 4 6

样例输出1
2
3

限制

每个测试点1s

提示

你可以认为黄金分割比就是0.6180339887498949

题目分析

分类:二分查找

这题直接用双重循环,每次计算分割比,若等于黄金分割比则输出,时间复杂度O(n^2),会超时。

这里要,先将数据进行排序,用二分查找的方式,计算num[i]/num[mid]最接近黄金分割比的下标。但是这里用二分查找到的下标,有可能找到的并不是最接近的。

举个例子,6 7 8 9 12对应的下标分别为0 1 2 3 4

mid=(0+4)/2=2

6/8=0.75>0.6180339887498949 l=mid+1

mid=(3+4)/2=3

6/9=0.66666667>0.6180339887498949 l=mid+1

mid=(4+4)/2=4

6/12=0.5

此时取到的下标为4,但是明显可以看出下标为3,即9的时候更接近黄金分割比。

这是由于在二分的过程中不是正好相等的情况,而差值则会导致有可能前面一个更接近黄金分割比,有可能后面一个更接近黄金分割比,在查找的过程由于大于或者小于而跳过了。所以要对查找的的mid与mid-1和mid+1都进行比较,找到最接近黄金分割比的。

完整代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;#define maxn 30000
double num[maxn];
#define result 0.6180339887498949int main(){int N;int i,l,r,suit,mid,s1,s2;double k,a,b,c,min;cin>>N;for(i=0;i<N;i++){cin>>num[i];    }sort(num,num+N);min=1;for(i=0;i<N-1;i++){l=i;r=N-1;while(l<=r){mid=(l+r)/2;if(num[i]/num[mid]<=result){r=mid-1;}else{l=mid+1;}} a=fabs(num[i]/num[mid-1]-result); //注意这里要用绝对值b=fabs(num[i]/num[mid]-result);c=fabs(num[i]/num[mid+1]-result);if(a<=b){if(a<=c){suit=mid-1;}else{suit=mid+1;} }else{if(b<=c){suit=mid;}else{suit=mid+1;}}if(num[i]/num[suit]==result){s2=suit;s1=i;break;}if(min>fabs(num[i]/num[suit]-result)){min=fabs(num[i]/num[suit]-result);s2=suit;s1=i;} }cout<<num[s1]<<endl<<num[s2]<<endl;return 0;
} 

隐形的翅膀 vijos相关推荐

  1. vijos 1237 隐形的翅膀

    隐形的翅膀 背景 小杉终于进入了天堂.他看到每个人都带着一双隐形翅膀,他也想要. (小杉是怎么看到的?--) 描述 天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美. 现 ...

  2. .NET2.0隐形的翅膀,正则表达式搜魂者【月儿原创】

    .NET2.0隐形的翅膀,正则表达式搜魂者 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.14 本文实现了:只能输入1个数 ...

  3. 视频监控为校园安全插上“隐形的翅膀”

    随着公众社会安全防范意识的提高,安防系统慢慢在各种公共场合普及.而我国教育事业的发展,高校的规模越来越大,学生人数不断增多,校区开放程度和后勤服务社会化程度亦越来越高,学校的管理工作和安全保安工作面临 ...

  4. 知识管理:如何让“隐形的翅膀”飞起来?

    知识管理:如何让"隐形的翅膀"飞起来? 时间:2013-06-07 16:25:46 来源: 中国期刊网 作者:陈新红 知识具有垄断性,但许多企业把知识管理看作员工的额外工作,或寄 ...

  5. 隐形的翅膀怎么用计算机弹出来,《隐形的翅膀》原版吉他谱分享,用音阶指法弹简谱其实很简单 ... ......

    <隐形的翅膀>是张韶涵的一首流行经典老歌,我们很多学吉他的朋友,初学吉他的时候经常会弹唱的一首歌,弹得可能简单版或者是其他版本,这里分享一个原版的吉他伴奏,相对来说要难一点,不过对于弹吉他 ...

  6. 隐形的翅膀怎么用计算机弹出来,《隐形的翅膀》原版吉他谱分享,用音阶指法弹简谱其实很简单 … …-520吉他网...

    时间:2020-05-14     来源:网络资源 <隐形的翅膀>是张韶涵的一首流行经典老歌,我们很多学吉他的朋友,初学吉他的时候经常会弹唱的一首歌,弹得可能简单版或者是其他版本,这里分享 ...

  7. 歌曲:隐形的翅膀 歌手:张韶涵

    歌名:隐形的翅膀 歌手:张韶涵 每一次 都在徘徊孤单中坚强 每一次 就算很受伤也不闪泪光 我知道 我一直有双隐形的翅膀 带我飞 飞过绝望 不去想 他们拥有美丽的太阳 我看见 每天的夕阳也会有变化 我知 ...

  8. 引领数字经济时代,软件企业需要一对“隐形的翅膀”

    ‍ ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 "报告局长,狙击手已经就位,随时准备强行进入解救人质."特警指挥官在现场向指挥中心的领导汇报道--在军警影视画面中,类似 ...

  9. 隐形的翅膀 北大校长 唱

    每一次 都在徘徊孤单中坚强 每一次 就算很受伤 也不闪泪光 我知道 我一直有双隐形的翅膀 带我飞 飞过绝望 不去想 他们拥有美丽的太阳 我看见 每天的夕阳 也会有变化 我知道 我一直有双隐形的翅膀 带 ...

最新文章

  1. oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程
  2. Docker 入门到实践笔记2
  3. 基于Android的百度地图开发
  4. python的django框架与springboot_Django框架简介
  5. ml是什么_ML,ML,谁是所有人的冠军?
  6. Java异常处理throws/throw
  7. 启动django项目 默认启动与指定端口启动
  8. linux shell 脚本路径,linux获取shell脚本所在绝对路径操作介绍
  9. Python稳基修炼的经典案例6(计算机二级、初学者必须掌握的例题)
  10. C++仿函数和typename的用法
  11. 老人机java游戏模拟器_JAVA手机软件模拟工具|JAVA手机游戏模拟器(KEmulator)下载_1.0 免安装版_9号软件下载...
  12. C语言连接Oracle数据库
  13. 【应用随机过程】01. 随机过程的基本概念
  14. 基于mysql的电商用户分析
  15. 完美解决织梦CMS加入lian666自动友情链接代码正常显示
  16. 公司官网建站笔记(五):域名工信部备案完整流程并解析公网访问
  17. 詹姆斯·西蒙斯-数学,常识和运气
  18. Linux常用基本命令分享
  19. 694. Number of Distinct Islands
  20. 网络摄像头海思开发板_海思HI3518EV、200wifi摄像头完美解决方案

热门文章

  1. 性能调优就是程序员的生命,火爆全网的性能调优实战手册,出手自腾讯 T4 大能,实在宝藏。
  2. C++ 产生随机数函数
  3. PySC2 --- 星际争霸Ⅱ 学习环境搭建
  4. AltiumDesigner的PCB网格显示改点显示
  5. 解决springmvc乱码问题
  6. 软件测试的艺术:因果图
  7. 电容笔一定要防误触吗?苹果平板平替电容笔排行
  8. 关于华为eNSP路由器无线#号解决方法
  9. python jsonpath_Python_JsonPath
  10. 【C语言】字符串转为十六进制(str_to_hex)