zoukankan      html  css  js  c++  java
  • [Poetize6] IncDec Sequence

    题面:Please contact with lydsy2012@163.com!

    给定一个长度为n的数列a1,a2,⋯,an,每次可以选择一个区间[l,r]使这个区间内的数都加1或者都减1。

    请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。

    那么就可以把这玩意弄成一个差分数组,然后就是把2~n都弄成0,一次可以让一个位置++,一个位置--,所以答案就是正数和 和 负数和 的绝对值最大值。方案数就是abs(正数和-|负数和|)+1。代码:

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N=100005;
    long long n,d[N],a[N],ans,bns;
    int main() {
        scanf("%lld",&n);
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(int i=2;i<=n;i++) d[i]=a[i]-a[i-1],ans+=d[i]*(d[i]>0),bns-=(d[i]<=0)*d[i];
        cout<<max(ans,bns)<<endl;
        cout<<abs(ans-bns)+1;
        return 0;
    }
    IncDec Sequence
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    最短路(Floyed、Dijkstra、Bellman-Ford、SPFA)
    查找技术
    简单线段树
    dfs
    bfs
    插件工具集合
    Web前端代码规范
    Javascript 判断手机横竖屏状态
    Git 笔记2
    git 笔记 1
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9669054.html
Copyright © 2011-2022 走看看