1 条题解
-
0
欲行否 LV 4 @ 6 年前
本人认为第一个数据点有误,故此题解为非正解,emmm,代码如下,采用贪心策略,寻找和最大的相邻两个数
```
- 1
信息
- 难度
- 10
- 分类
- (无)
- 标签
- 递交数
- 14
- 已通过
- 0
- 通过率
- 0%
- 上传者
本人认为第一个数据点有误,故此题解为非正解,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;
}