題目地址:http://codeforces.com/problemset/problem/1141/C
思維題,用到了線性代數中的線性方程組求解的方法,求出一個通式出來,然後在判斷這個通式的某一個解是否在1到n之間,這裏可以先另p[0]=0,再求出p[1],p[2],.....p[n],再找出最小的t=min(t,p[i]),最後把所有的p[i]=p[i]-t+1,即能求出一組解,然後進行判斷。
/*
http://codeforces.com/problemset/problem/1141/C
*/
#include<iostream>
using namespace std;
int q[200005];
int p[200005];
int f[200005];
int main()
{
int n;
cin>>n;
int i;
p[0]=0;
int mi=p[0];
for(i=0;i<n-1;++i)
{
cin>>q[i];
p[i+1]=p[i]+q[i];
mi=min(mi,p[i+1]);
}
mi=1-mi;
int F=0;
for(i=0;i<n;++i)
{
p[i]=p[i]+mi;
if(p[i]<=0||p[i]>n)
{
F=1;
break;
}
else if(f[p[i]])
{
F=1;
break;
}
f[p[i]]=1;
}
if(F) cout<<"-1\n";
else
{
for(i=0;i<n;++i) cout<<p[i]<<' ';
}
return 0;
}