zoukankan      html  css  js  c++  java
  • AGC024C Sequence Growing Easy

    题目大意

    你开始有一个序列x

    它所有项都是0

    你有一个操作:x[i]=x[i-1]+1

    问你至少几次操作可以让x序列变为给定的a序列

    分析

    老年人完全不会这种脑子题/kk........

    我们定义b[i]=i-a[i]

    所以对于一个连续的上升子序列它的b是相等的

    每次取一段想的b序列中最大的a[i]累加即可

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    #define int long long
    int a[200100],b[200100],n,m,ans;
    signed main(){
        int i,j,k;
        scanf("%lld",&n);
        for(i=1;i<=n;i++){
          scanf("%lld",&a[i]);
          b[i]=i-a[i];
          if(a[i]-a[i-1]>1||a[i]>=i){
            puts("-1");
            return 0;
          }
        }
        for(i=n;i>0;i--){
          if(i!=n&&b[i]==b[i+1])continue;
          ans+=a[i];
        }
        cout<<ans<<"
    ";
        return 0;
    }
  • 相关阅读:
    Python进阶08 生成器
    Python进阶07 迭代
    Python进阶06 列表推导
    Python进阶05 函数property
    Python基础14 集合
    支付宝支付和微信消息推送
    Redis
    django之contenttype
    数据分析系列
    IPython
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11384872.html
Copyright © 2011-2022 走看看