• hdoj5805【模拟】


    BestCoder Round #86 B NanoApe Loves Sequence
    题意:
    中文题,题意就算了
    思路:
    弱的思路…
    找一个最大,和第二大,第三大,标记下标(前面那个)
    ①:如果是1/n的话,最大就是他位置的话,那么就是第二大,
    ②:中间情况的话,需要判断两个位置是不是满足第一大,或者第一大和第二大都满足,还要和一个新产生的差值比一比。

    比赛时的挫code………

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    typedef __int64 LL;
    
    const int N = 1e5+10;
    
    LL a[N];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
    
    
    
            int n,m;
            scanf("%d",&n);
            for(int i=1; i<=n; i++)
                scanf("%I64d",&a[i]);
            LL m1=-1,m2=-1,m3=-1;
            int p1,p2,p3;
            LL x;
            for(int i=1; i<n; i++)
            {
                x=abs(a[i]-a[i+1]);
                if(x>m1)
                {
                    m3=m2;
                    p3=p2;
                    m2=m1;
                    p2=p1;
                    m1=x;
                    p1=i;
    
                    continue;
                }
                if(x>m2)
                {
                    m3=m2;
                    p3=p2;
                    m2=x;
                    p2=i;
                    continue;
                }
                if(x>m3)
                {
                    m3=x;
                    p3=i;
                }
            }
            //printf("%I64d %I64d %I64d
    %d %d %d
    ",m1,m2,m3,p1,p2,p3);
            LL sum=0;
            if(n==3)
            {
                sum+=abs(a[3]-a[2]);
                sum+=abs(a[3]-a[1]);
                sum+=abs(a[1]-a[2]);
            }
            else
            for(int i=1; i<=n; i++)
            {
                if(i==1)
                {
                    if(p1!=i)
                        sum+=m1;
                    else
                        sum+=m2;
                }
                else if(i==n)
                {
                    if(p1!=i-1)
                        sum+=m1;
                    else
                        sum+=m2;
                }
                else
                {
                    if(p1!=i-1&&p1!=i)
                        sum+=max(m1,abs(a[i-1]-a[i+1]));
                    else if(p1==i-1)
                    {
                        if(p2!=i)
                            sum+=max(m2,abs(a[i-1]-a[i+1]));
                        else
                            sum+=max(m3,abs(a[i-1]-a[i+1]));
                    }
                    else if(p1==i)
                    {
                        if(p2!=i-1)
                            sum+=max(m2,abs(a[i-1]-a[i+1]));
                        else
                            sum+=max(m3,abs(a[i-1]-a[i+1]));
                    }
                }
               // printf("%I64d
    ",sum);
            }
            printf("%I64d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    你是一直认为 count(1) 比 count(*) 效率高么?
    php 判断是不是https链接
    php 版本比较
    php 执行效率
    redis 队列缓存 + mysql 批量入库 + php 离线整合
    php 高并发下数据同步的问题
    一个合格的工程师的知识结构
    php 代码编写的格式
    php 四种基础算法 ---- 快速排序法
    php 四种基础算法 ---- 插入排序法
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934382.html
Copyright © 2020-2023  润新知