1 条题解

  • 0
    @ 2019-04-27 21:38:28

    本人认为第一个数据点有误,故此题解为非正解,emmm,代码如下,采用贪心策略,寻找和最大的相邻两个数
    ```

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define ll long long 
    
    const int N = 20001;
    
    using namespace std;
    
    inline ll read(){
        ll s=0,w=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-') w=-1; ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48); ch=getchar();}
        return s*w;
    }
    
    ll n, m, s[N], ans;
    
    inline void init(){
        n=read();
        for(int i=1;i<=n;i++) s[i]=read();
    }
    
    inline ll work(){
        if(n==3) {ans+=s[1]+s[2]+s[3]; return ans;}
        ans=s[1]+s[2];
        for(int i=3;i<=n;i++){
            if(s[i]<ans-s[i-1]) continue;
            if(s[i]>ans-s[i-1]) ans=s[i]+s[i-1];
    //      if(i==n){
    //          if(ans-s[n-1]-s[1]>s[n]) continue;
    //          if(ans-s[n-1]-s[1]<s[n]) ans=s[n]+s[n-1]+s[1];
    //      }
        }
        for(int i=1;i<=n;i++) m+=s[i];
        double mm=m,nn=n,sum;
        sum=ceil(mm/(int)(nn/2));
        if((int) sum>ans) ans=(int)sum;
        return ans;
    }
    
    int main(){
        init();
        printf("%lld",work());
        return 0;
    }
    
  • 1

信息

难度
10
分类
(无)
标签
递交数
14
已通过
0
通过率
0%
上传者