参考代码:
#include <iostream> #include <cstring> using namespace std; const int maxn = 400000 + 5, INF = 0x3f3f3f3f; int value[maxn], ans[maxn]; bool vis[maxn], flag; int main() { int n; cin >> n; flag = true; memset(vis, false, sizeof vis); for(int i = 0; i < n - 1; i ++) cin >> value[i]; ans[0] = 1; int Min = INF; for(int i = 0; i < n - 1; i ++) { ans[i + 1] = ans[i] + value[i]; } for(int i = 0; i < n; i ++) Min = min(Min, ans[i]); for(int i = 0; i < n; i ++) { ans[i] += 1- Min; if(ans[i] > 0 && ans[i] < maxn) vis[ans[i]] = true; } for(int i = 1; i <= n; i ++) if(!vis[i]) flag = false; if(!flag) cout << -1; else { for(int i = 0; i < n; i ++) cout << ans[i] << ' '; } cout << endl; return 0; }