题解:P11332 [NOISG 2020 Finals] Labels
xiaohuli113 · · 题解
序列
对于序列
那么如何判断求出的序列是否唯一呢?我们知道,序列
说简单点,如果序列
最后,如果得出的最小值是非正数怎么处理呢?如果是非正数,那让它变成正数就好了。我们假设最小值
#include<bits/stdc++.h>
using namespace std;
int n,d[300050],a[300050];
long long int maxn=1,minn=1;
int main(){
a[1]=1;//初始值
scanf("%d",&n);
for(int i=1;i<n;i++)scanf("%d",&d[i]);
for(int i=2;i<=n;i++){
a[i]=a[i-1]+d[i-1];//计算序列A中每个数字的值
if(a[i]<minn)minn=a[i];
if(a[i]>maxn)maxn=a[i];//通过比较算最大最小值
}
int c=maxn-minn;//最大值和最小值的差
if(c!=n-1)printf("-1");
else{
for(int i=1;i<=n;i++)printf("%d ",a[i]+1-minn);//让非正数变为正数
}
return 0;
}