运用差分思想,做以下操作:

  1. i=1,2,,ni = 1, 2, \ldots, n,做操作 (i1,i)(i-1,i),其中 00 相当于 nn
  2. 再做一次 (n,n)(n,n)

这样,对 i=1,2,,n1i = 1, 2, \ldots, n - 1bi=aiai1b_i=a_i-a_{i-1}bn=an1b_{n}=-a_{n-1}

此时 an1=bna_{n-1}=-b_{n},对 i=1,2,,n2i = 1, 2, \ldots, n - 2ai=ai+1bi+1a_{i}=a_{i+1}-b_{i+1}an=a1b1a_n=a_1-b_1

一步一步还原即可。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin >> n;
	cout << n << ' ' << n << endl;
	cout << n << ' ';
	for (int i = 1; i <= n - 1; i++)
		cout << i << ' ';
	cout << n + 1 << endl;
	for (int i = 1; i <= n; i++)
		cout << i << ' ';
	cout << n + 1 << endl;
	return 0;
}

/* ATTENTION!!! THIS IS THE BARRIER!!! */

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 12;
int a[N], b[N];
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> b[i];
	a[n - 1] = -b[n];
	for (int i = n - 2; i >= 1; i--)
		a[i] = a[i + 1] - b[i + 1];
	a[n] = a[1] - b[1];
	for (int i = 1; i <= n - 1; i++)
		cout << a[i] << ' ';
	cout << a[n] << endl;
	return 0;
}