2 条题解

  • 1
    @ 2023-5-29 16:41:03

    赛后补题

    类比知道a+b,b+c,c+d的情况求a,b,c。

    可以知道只要求出所有数据之和,再减去两倍的下标为奇数的数据即可求出最后一位。

    然后根据最后一位倒推即可。

    #include <bits/stdc++.h>
    using namespace std;
    
    signed main()
    {
        int n;
        cin>>n;
        int l[100001],ans[100001],al=0;
        for(int i=1;i<=n;i++){
            cin>>l[i];
            al+=l[i];
        }
        int lll=0;
        for(int i=1;i<n;i+=2){
            lll+=l[i];
        }
        lll*=2;
        ans[n]=al-lll;
        for(int i=n-1;i>=2;i--){
            ans[i]=2*l[i]-ans[i+1];
        }
        ans[1]=l[n]*2-ans[n];
        for(int i=1;i<n;i++){
            cout<<ans[i]<<" ";
        }
        cout<<ans[n];
    }
    
    • 1
      @ 2023-5-27 21:31:58

      设每个人收到的文件数为 ansians_i

      • nin \neq iai=ansi2+ansi+12a_i=\frac {ans_i}{2}+\frac {ans_{i+1}}{2}

      • n=in=iai=ansi2+ans12a_i=\frac {ans_i}{2}+\frac {ans_{1}}{2}

      联立化简

      ans1=a1a2+a3a4++an1anans_1=a_1-a_2+a_3-a_4+ \cdot\cdot\cdot+a_{n-1}-a_n

      代入解方程:

      ansi=(ai2bi12)×2ans_i=(\frac {a_i}{2}-\frac {b_{i-1}}{2})\times 2

      N = int(input())
      A = list(map(int, input().split()))
      
      ans = [(sum(A[0::2]) - sum(A[1::2]))]
      for i in range(N-1):
          ans.append(A[i]*2 - ans[i])
          
      print(*ans)
      
      • @ 2023-5-28 20:09:47

        前排支持

    • 1

    信息

    ID
    835
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    285
    已通过
    36
    上传者