AcWing 100. 增减序列
给定一个长度为n的数列每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。
求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+5; ll a[N],c,x,y; int main() { int n;cin>>n>>a[1]; for(int i=2;i<=n;i++) { scanf("%lld",&a[i]); c=a[i]-a[i-1]; if(c>0)x+=c; else y-=c; } cout<<max(x,y)<<endl<<abs(x-y)+1<<endl; return 0; }

浙公网安备 33010602011771号