E-Both Sides Merger
标程:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1005; 4 int n,Max,pos,tot,ans[N],a[N]; 5 vector<int> vec; 6 typedef long long ll; 7 ll sum1,sum2; 8 int main() 9 { 10 scanf("%d",&n);Max=-1e9-1;//注意max要赋值成负的! 11 for (int i=1;i<=n;i++) 12 { 13 scanf("%d",&a[i]);if (a[i]>Max) Max=a[i],pos=i; 14 if (i&1) sum1+=(a[i]>0)?a[i]:0; 15 else sum2+=(a[i]>0)?a[i]:0; 16 } 17 if (Max<0) 18 { 19 printf("%d\n%d\n",Max,n-1); 20 for (int i=n;i>pos;i--) printf("%d\n",i); 21 for (int i=1;i<pos;i++) puts("1"); 22 return 0; 23 } 24 for (int i=(sum1>sum2?1:2);i<=n;i+=2) if (a[i]>0) vec.push_back(i); 25 printf("%lld\n",max(sum1,sum2)); 26 for (int i=n;i>vec[vec.size()-1];i--) ans[++tot]=i; 27 for (int i=vec.size()-1;i>=1;i--) 28 { 29 int t=(vec[i]-vec[i-1])/2-1; 30 while (t--) ans[++tot]=vec[i-1]+2; 31 ans[++tot]=vec[i-1]+1; 32 } 33 for (int i=1;i<vec[0];i++) ans[++tot]=1; 34 printf("%d\n",tot); 35 for (int i=1;i<=tot;i++) printf("%d\n",ans[i]); 36 return 0; 37 }