C. Polycarp Restores Permutation
题意:
qi=pi+1−pi,给(1~n-1)的qi,求(1~n)的pi
解析:
给pn赋值400005,从后往前推
找(1~n)里pi最小的,每个pi减去(mins-1),就一定有个pi等于1
遍历pi,判断是否超过n或者重复
ac:
#include<bits/stdc++.h>
#define ll long long
#define MAXN 500005
using namespace std;
int a[MAXN];
int b[MAXN];
map<ll,int> vis;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<n;i++)
scanf("%d",&a[i]);
int c=400005;
b[n]=c;
int maxs=b[n];
for(int i=n-1;i>=1;i--)
{
b[i]=b[i+1]-a[i];
maxs=min(b[i],maxs);
}
maxs--;
for(int i=1;i<=n;i++)
{
b[i]=b[i]-maxs;
if(vis[b[i]]==1||(b[i]>n))
{
printf("-1\n");
return 0;
}
vis[b[i]]=1;
}
for(int i=1