vijos 隐形的翅膀

背景

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

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

描述

天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美。

现在天使给了小杉N只翅膀,小杉想挑出一对最完美的。

格式

输入格式

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

20%的数据N<=100

输出格式

对每组测试数据输出两个整数,表示小杉挑选出来的一对翅膀。

注意,比较短的在前,如果有多对翅膀的完美程度一样,请输出最小的一对。

样例1

样例输入1

4
2 3 4 6

Copy

样例输出1

2
3

Copy

限制

每个测试点1s

提示

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

来源

lolanv

这题比较神奇

 1 /*
 2     枚举一个数 a[i]
 3     除以黄金比 得到 t=a[i]/gold
 4     找到 与 t相差最小的数
 5 */
 6 #include<cstdio>
 7 #include<iostream>
 8 #include<algorithm>
 9 #define gold 0.6180339887498949
10 #define MAXN 30010
11
12 using namespace std;
13
14 int n,a[MAXN],Lx,Ry;
15
16 double minn=1000000.0;
17
18 inline void read(int&x) {
19     x=0;int f=1;char c=getchar();
20     while(c>‘9‘||c<‘0‘) {if(c==‘-‘) f=-1;c=getchar();}
21     while(c>=‘0‘&&c<=‘9‘) {x=(x<<1)+(x<<3)+c-48;c=getchar();}
22     x=x*f;
23 }
24
25 inline bool cmp(int a,int b) {
26     return a<b;
27 }
28
29 inline double abs(double x) {
30     if(x<0) return -x;
31     return x;
32 }
33
34 int main() {
35     read(n);
36     for(int i=1;i<=n;i++) read(a[i]);
37     sort(a+1,a+1+n,cmp);
38     for(int i=1;i<=n;i++) {
39         if(a[i]==0) continue;
40         double p=a[i]/gold;
41         int l=i,r=n,mid,k;
42         while(l<=r) {
43             mid=(l+r)>>1;
44             if(a[mid]>p) r=mid-1,k=r;
45             else l=mid+1;
46         }
47         if(a[k]==0) continue;
48         double temp=abs((double)a[i]/a[k]-gold);
49         if(temp<minn) {
50             minn=temp;
51             Lx=a[i];
52             Ry=a[k];
53         }
54     }
55     printf("%d\n%d\n",Lx,Ry);
56     return 0;
57 } 

90分代码

上面的方法不知道哪里有问题

只好换一种原理

 1 /*
 2     枚举两个数
 3     计算黄金比
 4     取最优值
 5 */
 6 #include<cstdio>
 7 #include<iostream>
 8 #include<algorithm>
 9 #define gold 0.6180339887498949
10 #define MAXN 30010
11
12 using namespace std;
13
14 int n,a[MAXN],Lx,Ry;
15
16 double minn=1000000.0;
17
18 inline void read(int&x) {
19     x=0;int f=1;char c=getchar();
20     while(c>‘9‘||c<‘0‘) {if(c==‘-‘) f=-1;c=getchar();}
21     while(c>=‘0‘&&c<=‘9‘) {x=(x<<1)+(x<<3)+c-48;c=getchar();}
22     x=x*f;
23 }
24
25 inline bool cmp(int a,int b) {
26     return a<b;
27 }
28
29 inline double abs(double x) {
30     if(x<0) return -x;
31     return x;
32 }
33
34 inline bool judge(int x,int y) {
35     double GOLD=(double)a[x]/(double)a[y];
36     if(GOLD<gold) {
37         if(gold-GOLD<minn) {
38             minn=gold-GOLD;
39             Lx=a[x];
40             Ry=a[y];
41         }
42         return 1;
43     }
44     if(GOLD>gold) {
45         if(GOLD-gold<minn) {
46             minn=GOLD-gold;
47             Lx=a[x];
48             Ry=a[y];
49         }
50         return 0;
51     }
52 }
53
54 int main() {
55     read(n);
56     for(int i=1;i<=n;i++) read(a[i]);
57     sort(a+1,a+1+n,cmp);
58     for(int i=1;i<=n;i++) {
59         if(a[i]==0) continue;
60         double p=a[i]/gold;
61         int l=i,r=n,mid,k;
62         while(l<=r) {
63             mid=(l+r)>>1;
64             if(judge(i,mid)) r=mid-1;
65             else l=mid+1;
66         }
67     }
68     printf("%d\n%d\n",Lx,Ry);
69     return 0;
70 } 

AC代码

时间: 2024-12-21 17:18:46

vijos 隐形的翅膀的相关文章

二分查找(隐形的翅膀vijos1237)

背景 小杉终于进入了天堂.他看到每个人都带着一双隐形翅膀,他也想要. (小杉是怎么看到的?……) 描述 天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美. 现在天使给了小杉N只翅膀,小杉想挑出一对最完美的. 格式 输入格式 每组测试数据的第一行有一个数N(2<=N<=30000)第二行有N个不超过1e5的正整数,表示N只翅膀的长度. 20%的数据N<=100 输出格式 对每组测试数据输出两个整数,表示小杉挑选出来的一对翅膀. 注意,比较短的在前,如果有多对翅

IMXRT1061“智能手环”为工业制造插上“隐形的翅膀”

从生活到工业,数字技术无处不在.在生活中,数字技术的发展促使互联网得到巨大的创新,"智慧生活"充斥在生活场景里的各个角落.随着健身热,各种智能运动手环开始风靡全球,不仅可以记录步数,还可以帮助我们分析每天的运动健康情况.如今,工业设备也能"戴"上这样的"智能手环". 所谓的"工业手环"并非是类似于人们常用的健康手环一样的东西,而是专为工业环境而打造,一种能够检测工业设备"健康"的智能硬件设备. 只需要将&q

《我和你》-51CTO学院

提起码字儿写文章,只是<十七岁那年的雨季>时的<理想>.从当年的<追风少年>到现在的大叔,不知是什么力量,也许是<天意>,<在那遥远的地方>好像有一双<隐形的翅膀>使我<大约在冬季>的时候<选择>和学院<牵手>合作.属于我们讲师的<光辉岁月>来临了.刚开始录时不熟练,只能反复<练习>,<风雨无阻>的录课后,就能站<在希望的田野>上收获,在大半年与学院&

我们工作到底为了什么(这篇文章很重要)

我们工作到底为了什么(这篇文章很重要) HP大中华区总裁孙振耀退休感言 : 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个"茫"人了. 如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就会感叹自己的年少无知. 如果你看完了,觉得很有道理,然后束之高阁,继续走进拥挤的地铁,依然用着自己昨日的

孙振耀退休感言

这片文章我在网上不同的地方看到3次了,我也不知道真正出处是那儿,我就不写转载地址了.字数是有点多,值得花上二十分钟来阅读,收获会是很大的. 以下是HP大中华区总裁孙振耀退休感言. 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个"茫"人了. 如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就

花10分钟看一看,少走30年的弯路

HP大中华区总裁孙振耀退休感言: 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个"茫"人了. 如果你看完了,你觉得这篇文章只是讲讲大道理,说明你的人生阅历还不够,需要你把这篇文章珍藏,走出去碰几年壁,头破血流后再回来,再读,你就会感叹自己的年少无知. 如果你看完了,觉得很有道理,然后束之高阁,继续走进拥挤的地铁,依然用着自己昨日的观念来思考自己的未来,你的人生也将继续重复

这些年正Android - 大学

 还记得,第一次看见小周是在大一的操场上. 她正向教学楼站着,一身白配粉的休闲上衣搭配湖蓝色的牛仔裤,穿着一双很平凡的凉鞋,手里拿着当年的Nokia 3110c,皙清的手指,素颜的站着不言不笑.现在回想起来怎么都不像是日后C语言学的“666”的优质生.也许还真是人不可貌相,漂亮的不像实力派. 我还记得那天下午飘落了一点细雨,空气好的让我很贪婪的吸允好久,叶子饱含着水,绿的黑亮.小周一个人静静的看着被细雨浸透的天空,类似发呆的想着什么似得.当时的我还很幼稚,可能会对漂亮的女孩子动心,不过好在有一种

职业规划建议

p.s. 本文章转载自http://blog.csdn.net/luqin1988/article/details/8648994.记录在自己博客,以作后面职业选择参考. 选择职业 职业的选择,总的来说,无非就是销售.市场.客服.物流.行政.人事.财务.技术.管理几个大类,有个有趣的现象就是,500强的CEO当中最多的是销售出身,第二多的人是财务出身,这两者加起来大概超过95%.现代IT行业也有技术出身成为老板的,但实际上,后来他们还是从事了很多销售和市场的工作,并且表现出色,公司才获得了成功,

韩波兄的好文:写给过去,现在和未来的自己

来到澳洲两个半月了,现在也逐渐适应了这里的生活.总觉得这里的生活节奏很慢,人过于安逸或者安于现状,这显然不是我的生活节奏.我想回忆一下过去的苦日子和拼搏精神,从精神面貌上给当前的自己一个警醒和一些动力,也算是记录过去8年的生活和展望未来的日子. 我清楚的记得自己从2006年10月1号开始复读,我的学号是72号,全班大概100多人.那一年里,我脱胎换骨,与过去3年那种逍遥自在的生活做告别,我几乎戒掉了一切高中时期的娱乐,把自己封闭在一个没人知道的角落,这像极了改头换面重新做人.那时的自己时常背着大