石子合并

http://www.51nod.com/Challenge/Problem.html#problemId=1023

#include<bits/stdc++.h>

using namespace std;

const int maxn = 5e4+1;
long long a[maxn], b[maxn], tot, ans;

void combine(int x) {
    long long i, d, temp;
     temp = b[x] + b[x+1];
    for(i = x+1; i <= tot-1; i++) {
        b[i] = b[i+1];
    }
     ans += temp, tot -= 1;
    for(i = x-1; i >= 1 && b[i] <= temp; i--) {
        b[i+1] = b[i];
    }
     b[i+1] = temp;
     while(i >= 2 && b[i-1] <= b[i+1])
     {
          d = tot-i;
          combine(i-1);
          i = tot-d;
     }
}

int main() {
    int n; scanf("%d", &n);
      for(int i = 1; i <= n; i ++) {
        scanf("%lld", &a[i]);
        b[i] = a[i];
      }
    a[++n] = LLONG_MAX;
      for(int i = 1; i <= n; i ++)
      {
           b[++tot] = a[i];
           while(tot >= 3 && b[tot-2] <= b[tot])
            combine(tot-2);
      }
      printf("%lld\n", ans);
     return 0;
}


全部评论

相关推荐

ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务