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]);
    }
  • 相关阅读:
    SPOJ 694 (后缀数组) Distinct Substrings
    POJ 2774 (后缀数组 最长公共字串) Long Long Message
    POJ 3693 (后缀数组) Maximum repetition substring
    POJ 3261 (后缀数组 二分) Milk Patterns
    UVa 1149 (贪心) Bin Packing
    UVa 12206 (字符串哈希) Stammering Aliens
    UVa 11210 (DFS) Chinese Mahjong
    UVa (BFS) The Monocycle
    UVa 11624 (BFS) Fire!
    HDU 3032 (Nim博弈变形) Nim or not Nim?
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500013.html
Copyright © 2011-2022 走看看