求出 a 的差分序列 b,其中 b1 = a1,bi = ai - ai-1(2 <= i <= n)。令 bn+1 = 0。題目對序列 a 的操作,相當於每次可以選出 b1,b2,...,bn+1 中的任意兩個數,乙個加一,另乙個減一。目標是把 b2,b3,...,bn 變為全零。最終得到的數列 a 就是由 n 個 b1 構成的。
從 b1,b2,...,bn+1 中任選兩個數的方法可分為四類:
選 bi 和 bj,其中 2<=i,j<=n。這種操作會改變 b2,b3,...,bn中兩個數的值。應該在保證 bi 和 bj 一正一負的前提下,盡量多採用這種操作,更快的接近目標。
選 b1 和 bj,其中 2<=j<=n.
選 bi 和 bn+1,其中 2<=i<=n.
選 b1 和 bn+1,這種情況沒意義。
#include using namespace std;
#define ll long long
#define n 110000
ll n,m,i,j,p,q,a[n];
int main()
ll ans1=max(p,q),ans2=abs(p-q)+1;
cout<
return 0;
}
AcWing 100 增減序列
給定乙個長度為 nn 的數列 a1,a2,ana1,a2,an,每次可以選擇乙個區間 l,r 使下標在這個區間內的數都加一或者都減一。求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。輸入格式 第一行輸入正整數nn。接下來nn行,每行輸入乙個整...
AcWing100 增減序列 差分
求出 a i 的差分數列 b i 題目的目的是使 b 2,ldots,b n 都變為 0 令 p,q 分別為 中正數和負數之和的絕對值,優先在 b 2,ldots,b n 中選一對正負數操作肯定是最優的,之後再分別與 b 1或b n 配對操作 include include include incl...
AcWing100 增減序列 差分 貪心
原題鏈結 題目要求通過對區間 l,r 的操作 1或者 1 使數列中數都一樣.我們發現滿足上述要求的數列的差分陣列的a 2 n 一定是 0,0,0,a 1 是val 據此,我們可以將問題轉化成經過最少次對區間 l,r 的操作使差分陣列a變為 val,0,0,0,下面是貪心的部分 大佬的部落格講解 in...