134 条题解
-
0hyj LV 3 @ 2006-10-19 14:37:57
纪念一下
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02006-10-12 21:04:27@
Finally AC
高兴ing -
02006-10-09 20:35:37@
用两个指针来维护~~太神奇了~~第一次用……瞬过~~太帅气了……以后好好学学这种O(n)的算法……
-
02006-10-05 13:46:34@
0.6180339887498949怎么算出来的?
-
02006-10-31 13:20:02@
晕哦 又是90分 打击。。。
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms -
02006-10-04 17:28:32@
用哈希表存储对于1-1e5范围内的每一个数,给出的数组中分别从左边和右边最接近它(包括它本身)的数。这样,从输入数据中最大的数开始枚举,如果数组中有数i,那么通过计算找到与它的比等于黄金比的整数,再验证这个数的左边和右边最近数(这里包括其本身)与数i是否构成更优解。
注意边界和精度。 -
02006-10-04 16:37:37@
警告:..................!!!!!!!
一定要考虑精度!!!!!!!!!!!!!!!!!
以1e-10为准!!!!!!!!!!!!!!!!!!! -
02006-10-04 12:11:31@
From lolanv
隐形的翅膀 天使的施舍 系列编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms不用处理误差,这才是O(N)的效率~~
-
02006-11-16 20:51:32@
http://download.curvesoft.net/audios/Invisible.Wings.mp3
歌曲:隐形的翅膀 歌手:张韶涵 专辑:潘朵拉
每一次
都在徘徊孤单中坚强
每一次
就算很受伤
也不闪泪光
我知道
我一直有双隐形的翅膀
带我飞
飞过绝望
不去想
他们拥有美丽的太阳
我看见
每天的夕阳
也会有变化
我知道
我一直有双隐形的翅膀
带我飞
给我希望
我终于
看到
所有梦想都开花
追逐的年轻
歌声多嘹亮
我终于
翱翔
用心凝望不害怕
哪里会有风
就飞多远吧
隐形的翅膀
让梦恒久比天长
留一个
愿望
让自己想象 -
02006-10-04 10:00:45@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms排序+二分查找
-
02006-10-04 09:02:04@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 853ms
├ 测试数据 04:答案正确... 822ms
├ 测试数据 05:答案正确... 822ms
├ 测试数据 06:答案正确... 838ms
├ 测试数据 07:答案正确... 838ms
├ 测试数据 08:答案正确... 838ms
├ 测试数据 09:答案正确... 869ms
├ 测试数据 10:答案正确... 853ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:6733ms看我用的时间……这就是排序加O(n)枚举的结果……
-
02006-10-03 20:07:35@
出现的是无序的么
-
02006-10-03 20:00:04@
这是一类题目的典型!也是本次比赛最简单的题目。
朴素算法是容易想到的,枚举所有点对,找出商最接近的就可以了。
但对于3e4的数据来说,O(n^2)的算法是不能承受的。
[改进]显然对于每个数,只要考察比它大的数就可以了,于是我们想到先做一次排序。而我们又发现,对于一个数,如果除一个数已经小于0.618…..或某个数除它已经大于0.618…那么这个数可以不考察了。(注意,这有点拗口,仔细想想)。
[算法]我们先排序数列,然后维护两个指针l,r,每次用a[l]/a[r]更新最接近0.618….的数,然后有:
if (a[l]/a[r] -
-12016-11-16 21:29:28@
一开始太繁琐RE,改简洁后直接AC
```
#include<iostream>
#include<cstdio>
#include<algorithm>
#define Goal 0.6180339887498949
#define maxn 30010
using namespace std;
int n,a[maxn];
int ans,re;
double mi_n=100.00000000;double abx(double x){
if(x>0) return x;
else return -x;
}bool cmp(int a, int b){
return a<b;
}bool check(int mid,int x){
double tmp=a[x]/a[mid];
if(tmp<Goal) return true;
else return false;
}void search(int x){
int l=x+1,r=n,temp;
while(l<r){
int mid=(l+r)>>1;
double tmp=(double)a[x]/(double)a[mid];
if(tmp<Goal){
if(abx(tmp-Goal)<mi_n){
mi_n=abx(tmp-Goal);
temp=mid;
ans=x;re=temp;
}
r=mid;
continue;
}
else {
if(abx(tmp-Goal)<mi_n){
mi_n=abx(tmp-Goal);
temp=mid;
ans=x;re=temp;
}
l=mid+1;continue;
}
}
}int main(){
freopen("Y.in","r",stdin);
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++){
search(i);
}
printf("%d\n%d\n",a[ans],a[re]);
return 0;
}
```