zoukankan      html  css  js  c++  java
  • 解题:Poetize6 IncDec Sequence

    题面

    差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$。然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位置”操作)。

    那么第一问的答案就是差分数组中$dif[2]->dif[n]$中正数的和$sum1$和负数和的绝对值$sum2$取$max$(贪心地互相消,消不了的给“空位置”消)。第二问就是把消不了的$|sum1-sum2|$给空位置配对,答案是$|sum1-sum2|+1$(注意考虑零的情况)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=100005;
     6 long long num[N],dif[N];
     7 long long n,sum1,sum2;
     8 long long abss(long long x)
     9 {
    10     return x>0?x:-x;
    11 }
    12 int main ()
    13 {
    14     scanf("%lld",&n);
    15     for(int i=1;i<=n;i++) 
    16         scanf("%lld",&num[i]);
    17     dif[1]=num[1]; 
    18     for(int i=2;i<=n;i++) 
    19     {
    20         dif[i]=num[i]-num[i-1];    
    21         if(dif[i]>0) sum1+=dif[i];
    22         else sum2-=dif[i];
    23     }
    24     printf("%lld
    %lld",max(sum1,sum2),abss(sum1-sum2)+1); 
    25     return 0;
    26 }
    View Code
  • 相关阅读:
    变量作用域
    模块化编程-函数
    递归
    变量
    形参和实参
    函数返回值
    node.js+yarn环境centos7快速部署
    LINUX磁盘添加挂载
    分布式存储MINIO集群部署实例
    Docker取消默认https连接
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/9677739.html
Copyright © 2011-2022 走看看