Atcoder arc092

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 }
View Code

猜你喜欢

转载自www.cnblogs.com/Scx117/p/9169253.html