读题点 这里
题意简述
有一个非负整数序列 a,定义 d1=a1,di=∣ai−ai−1∣。现在给出序列 d,问是否能确定唯一的序列 a。不能输出 −1 ,否则输出序列 a。
思路分析
我们通过 di=∣ai−ai−1∣ 可以得到 ai=di+ai−1 或 ai=ai−1−di。
当序列 a 只有唯一的一种可能性时, di+ai−1 和 ai−1−di 其中只能有一个大于或等于 0 ,或是它们的值相等。
所以我们可以求出 di 对应的两个 ai 的值,当不满足条件时输出 −1 ,否则将其中大于或等于 0 的值存入数组即可。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<bits/stdc++.h> using namespace std; #define N 105
int T,n,d[N],a[N];
int main(){ cin>>T; while(T--){ cin>>n; for(int i=1;i<=n;i++){ cin>>d[i]; } a[1]=d[1]; bool flag=0; for(int i=2;i<=n;i++){ int a1=d[i]+a[i-1],a2=a[i-1]-d[i]; if(a1>=0&&a2>=0&&a1!=a2){ cout<<-1<<endl; flag=1; break; }else{ if(a1>=0) a[i]=a1; else a[i]=a2; } } if(!flag){ for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } cout<<endl; } } return 0; }
|