zoukankan      html  css  js  c++  java
  • 隐形的翅膀(玄学离散化)

    背景

    小杉终于进入了天堂。他看到每个人都带着一双隐形翅膀,他也想要。
    (小杉是怎么看到的?……)
    描述

    天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美。
    现在天使给了小杉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

    分析
    这题很神奇,看不懂为什么这是离散化?
    这题就是一个O(N)的事。

    程序:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    double gold=0.6180339887498949,q,mx;
    int n,a[30001];
    int i,j,ass,stick;
    bool cmp(int a,int b)
    {
        return a<b;
    }
    int main()
    {
        scanf("%d",&n);
        for (i=1;i<=n;i++)
        scanf("%d",&a[i]);
        sort(a+1,a+n+1,cmp);
        mx=2147483647.0;
        for (i=1;i<=n;i++)
        {
            q=(double)a[i]/gold;
            for (j=i+1;j<=n;j++)
            {
                if (mx>abs((double)a[j]-q))
                {
                    mx=abs((double)a[j]-q);
                    ass=i;
                    stick=j;
                }
                if ((double)a[j]-q>0) break;
            }
        }
        printf("%d
    %d",a[ass],a[stick]);
    }
  • 相关阅读:
    NumPy笔记:运算符(exp,sqrt,square)
    NumPy笔记:常用操作
    php字符操作
    laravel如何实现批量插入
    php中@符号的作用
    laravel如何实现数据的批量插入
    如何在laravel框架中使用阿里云的oss
    laravle如何设置mysql数据表前缀
    thinkphp视图中如何调用并且向控制器传参数
    thinkphp如何隐藏入口文件index.php
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500013.html
Copyright © 2011-2022 走看看