2 条题解

  • 0
    @ 2026-4-5 11:28:55

    考虑差分,使得 bi=ai−ai−1b_i = a_i - a_{i - 1},b1=a1−anb_1 = a_1 - a_n。

    但此时 ∑i=1nbi=0\displaystyle \sum _{i = 1} ^n b_i = 0 导致丢失了一部分信息,于是我们再给 b1b_1 减去 a1a_1,此时 b1=−anb_1 = -a_n。

    有了 aia_i 和 bi=ai−ai−1b_i = a_i - a_{i - 1},我们就可以递推得到 ai−1=ai−bia_{i - 1} = a_i - b_i,至此问题得到解决。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        cout << 1 << ' ' << 1 << endl;
        for (int i = 1; i <= n; i++)
            cout << i << ' ';
        cout << n + 1 << endl;
        for (int i = 1; i <= n - 1; i++)
            cout << i + 1 << ' ';
        cout << 1 << ' ' << n + 1 << endl;
        return 0;
    }
    
    /* ATTENTION!!! THIS IS THE BARRIER!!! */
    
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 12;
    long long a[N], b[N];
    int main()
    {
        int n, X0 = 1, Y0 = 1;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> b[i];
        a[n] = -b[1];
        for (int i = n - 1; i >= 1; i--)
            a[i] = a[i + 1] - b[i + 1];
        for (int i = 1; i <= n - 1; i++)
            cout << a[i] << ' ';
        cout << a[n] << endl;
        return 0;
    }
    
    • 0
      @ 2026-4-4 22:59:01

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

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

      这样,对 i=1,2,…,n−1i = 1, 2, \ldots, n - 1,bi=ai−ai−1b_i=a_i-a_{i-1},bn=−an−1b_{n}=-a_{n-1}。

      此时 an−1=−bna_{n-1}=-b_{n},对 i=1,2,…,n−2i = 1, 2, \ldots, n - 2 有 ai=ai+1−bi+1a_{i}=a_{i+1}-b_{i+1},an=a1−b1a_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;
      }
      
      • 1

      信息

      ID
      248
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      14
      已通过
      4
      上传者