这个题把一直写一下,然后求前缀和,能得到前缀和数列是0 p2-p1 p3-p1……pn-p1,最后同时加上p1(p1=1-min),嗯!

其实写出来就知道明白了

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
int arr[N];
int main(){
    set <int> st;
    int n;cin>>n;
    int pre=0;
    st.insert(pre);
    int maxs=0;int mins=0;
    arr[1] = pre;
    for(int i=2;i<=n;i++){
        int x;cin>>x;
        pre+=x;
        st.insert(pre);
        maxs=max(maxs,pre);
        mins=min(mins,pre);
        arr[i]=pre;
    }
    if(st.size()!=n || maxs-mins+1 != n)
        cout<<"-1"<<endl;
    else{
        for(int i=1;i<=n;i++){
            cout<<arr[i]+(1-mins)<<" ";
        }
        cout<<endl;
    }
    //system("pause");
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注