3 条题解

  • 1
    @ 2025-3-13 11:18:08

    解方程

    首先我们发现 2×si=ai+ai+12\times s_i=a_i+a_{i+1}

    然后我们可以列出一个 nn 元一次方程

    将前 n1n-1 个相减得到 ana1=ka_n-a_1=k

    然后再与 an+a1=sna_n+a_1=s_n 联立

    最后依次求出每个 aia_i 的值

    • 0
      @ 2025-7-7 9:02:52

      fif_i 表示第 i 只猴子分到的金子克数

      f1+f2=2a1f_1+f_2=2a_1 ------(1)

      f2+f3=2a2f_2+f_3=2a_2 ------(2)

      f3+f4=2a3f_3+f_4=2a_3 ------(3)

      f4+f5=2a4f_4+f_5=2a_4 ------(4)

      ……

      fn2+fn1=2an2f_{n-2}+f_{n-1}=2a_{n-2} ------(n-2)

      fn1+fn=2an1f_{n-1}+f_n=2a_{n-1} ------(n-1)

      fn+f1=2anf_n+f_1=2a_n ------(n)

      相减,相加,消项,注意 n 是奇数

      (1)-(2)=f1f3=2(a1a2)f_1-f_3=2(a_1-a_2)

      (3)-(4)=f3f5=2(a3a4)f_3-f_5=2(a_3-a_4)

      ……

      (n-2)-(n-1)=fn2fn=2(an2an1)f_{n-2}-f_n=2(a_{n-2}-a_{n-1})

      fn+f1=2anf_n+f_1=2a_n ------(n)

      以上式子相加,得:

      2f1=2(a1a2+a3a4++an1+an)2f_1=2(a_1-a_2+a_3-a_4+……+a_{n-1}+a_n)

      所以

      f1=a1a2+a3a4++an1+anf_1=a_1-a_2+a_3-a_4+……+a_{n-1}+a_n

      #include<bits/stdc++.h>
      using namespace std;
      long long n,a[1000005],f[1000005];
      int main()
      {
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
          cin>>n;
          for(int i=1;i<=n;i++) cin>>a[i];
          
          for(int i=1;i<=n;i++)
          {
              if(i%2)
              {
                  f[1]+=a[i];
              }
              else
              {
                  f[1]-=a[i];
              }
          }
          for(int i=2;i<=n;i++) f[i]=2*a[i-1]-f[i-1];
          	
          for(int i=1;i<=n;i++) cout<<f[i]<<' ';
          
          return 0; 
      }
      
      • -1
        @ 2025-3-13 9:26:53

        题意

        给你一个环 他的编号分别为1n1-n

        他们直接有一个篮子,iii+1i+1之间的篮子编号为ii,特别的11nn之间的篮子编号为nn

        每个点会把他自己的点权分成等大的两份分别放在左右两个篮子中,给出每个篮子的值a[i]a[i]

        问每个点的点权是多少

        做法

        b[i]b[i]ii点的点权

        b[i]=1/2a[i]+a[i1]b[i] = 1/2*a[i] + a[i-1]

        然后可以发现b[1]=a[i](1)i1b[1] = \sum a[i] * (-1) ^ {i-1}

        b[i]=b[i1]+2a[i]b[i] = - b[i-1] + 2 * a[i]

        code

        #include <bits/stdc++.h>
        using namespace std;
        
        const long long N = 1e6 + 10;
        
        long long n, s[N], sum;
        
        void read() {
        	cin >> n;
        	sum = 0;
        	for(long long i = 1; i <= n; i++) {
        		cin >> s[i];
        		sum += s[i];
        	}
        	return ;
        }
        
        void compute() {
        	long long www = 0;
        	for(long long i = 1; i <= n; i++) {
        		if(i % 2 == 1) www += s[i];
        		else www -= s[i];
        	}
        	long long k = www;
        	for(long long i = 1; i <= n; i++) {
        		if(k < 0) {
        			cout << -1 << '\n';
        			return ;
        		}
        		k = - k + 2 * s[i];
        	}
        	if(k < 0) {
        		cout << -1 << '\n';
        		return ;
        	}
        	k = www;
        	for(long long i = 1; i <= n; i++) {
        		cout << k << ' ';
        		k = - k + 2 * s[i];
        	}
        	cout << '\n';
        }
        
        int main() {
        //	freopen("国王游戏ex.in","r",stdin);
        //	freopen("国王游戏ex.out","w",stdout);
        	ios::sync_with_stdio(0);
        	cin.tie(0), cout.tie(0);
        	while(1) {
        		read();
        		if(n == 0) break;
        		compute();
        	}
        	return 0;
        }
        
        
        • 1

        信息

        ID
        71
        时间
        1000ms
        内存
        256MiB
        难度
        6
        标签
        (无)
        递交数
        41
        已通过
        14
        上传者