1 条题解
-
0欲行否 LV 4 @ 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%
- 上传者