• 洛谷4552 差分


    题目链接

      https://www.luogu.com.cn/problem/P4552

    题意

      给定一数列,问至少变换多少次后可以得到一个所有数都相等的数列,输出次数和数列种数

    分析

      单纯要是想对这个数列进行操作就十分麻烦,所以我们考虑换个角度,让所有数都相等的意思不就是让它的差分数组除了下标为1的位置外都是0吗,而又要求变换最少次,对一个区间进行变换,需要在l的位置±1,r+1的位置±-1,所以我们需要对一个负数和一个正数同时操作,当只剩下一种数的时候,我们可以将r当成n或者将1当成l,所以变换的最少次数就是负数和正数中总数最大的那个,再考虑种数,一个负数与一个正数相消是不会影响种数的,所以要取得最大种数,只能是将正数或负数中的一类全部消完,这样后才能对1的位置进行修改,从而改变整个数列,最后别忘了加上不进行修改的种类。

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int N=1e5+1;
    int a[N],b[N];
    int main(){
        int n;
        long long s1,s2;//不开long long见祖宗
        s1=s2=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        b[1]=a[1];
        for(int i=2;i<=n;i++){
            b[i]=a[i]-a[i-1];
            if(b[i]>0)s1+=b[i];
            else s2-=b[i];
        }
        printf("%lld
    %lld",max(s1,s2),abs(s1-s2)+1);
        return 0;
    }
  • 相关阅读:
    http方法-get和post
    SVG
    canvas
    h5拖放
    jQuery表单事件
    html标签嵌套
    jquery.eq()
    jquery.index()
    Date对象
    json
  • 原文地址:https://www.cnblogs.com/anyixing-fly/p/12445558.html
Copyright © 2020-2023  润新知