zoukankan      html  css  js  c++  java
  • CF911A

    题解:

    先按照a大小排序(要双关键字)

    然后和a[1]一样的按照b减一减,取最小

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e6+5;
    int a[N],b[N],f[N],n;
    int cmp(int x,int y)
    {
        return a[x]<a[y]||(a[x]==a[y]&&b[x]<b[y]); 
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=f[i]=i;
        sort(f+1,f+n+1,cmp);
        int M=2e9,ans=2e9,k=2e9;
        for (int i=1;i<n;i++)M=min(abs(a[f[i]]-a[f[i+1]]),M);
        for (int i=1;i<n;i++)
         if (abs(a[f[i]]-a[f[i+1]])==M&&a[f[i]]==a[f[1]])
          {ans=min(ans,abs(b[f[i]]-b[f[i+1]]));k=a[f[i]];}
        printf("%d
    ",ans);
    }
  • 相关阅读:
    HDU5873
    HDU5874
    HDU1565(状态压缩dp)
    POJ2774(二分+哈希)
    HDU4474
    HDU2602(背包)
    单链表
    POJ2503(hash)
    POJ1200(hash)
    顺序表
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8167463.html
Copyright © 2011-2022 走看看