(构造)计算式

构造一个长度为2⋅n 的数组 a,使得以下条件成立:
(a1*a2)+(a3*a4)+...+(a2n-1*a2n) = a1*(a2+a3)*(a4+a5)*...*(a2n-2+a2n-1)*a2n
即两种不同的括号放置方式得到的结果计算式.


因为a2,a3,a4,a5......这些相乘结果会很大,考虑让这些变成一,即
a[i] = 2 , (n%2 AND i != 2*n) ,
a[i] = -1 , (!n%2 AND i != 1) .

再令a1 = 1,可解得a2n = 3 - n .

#include<bits/stdc++.h>
using namespace std;
#define ll long long    

ll T;

int main(){
    
    cin >> T;
    //T = 1;
    
    while(T--){
		ll n;cin >> n;
		if(n == 3){
			cout << "1 -10 6 6 -10 1" << endl;
			goto done;
		}
		cout << 1 << ' ';
		for(int i=1;i<2*n-1;++i) cout << ((i%2)?2:-1) << ' ';
		cout << 3-n << endl;
		done:;
    }
    
    return 0;
}
posted @ 2024-11-23 20:58  shen_kong  阅读(26)  评论(0)    收藏  举报