【题解】恢复数组
题意
给你一个序列所有元素的和,以及每个
的值,问你将原序列恢复出来。
题解
我们可以求一下前缀和会发现前缀和就变成
那么我们把每个前缀和求个和就会得到,前面可以再拿个
出来就会有
。
所以我们就可以得到的值了,那么剩下每个的值都可以恢复了。
复杂度
时间复杂度
代码
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int a[N]; int b[N]; int main() { int t; scanf("%d", &t); while(t--) { int n; long long m; scanf("%d%lld", &n,&m); long long pre=0; long long sum=0; for(int i=1; i<n; ++i) { scanf("%d",&b[i]); pre+=b[i]; sum+=pre; } a[1]=(sum+m)/n; printf("%d ",a[1]); for(int i=2;i<=n;i++) { a[i]=a[i-1]-b[i-1]; printf("%d ",a[i]); } printf("\n"); } }