(构造)计算式
构造一个长度为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;
}

浙公网安备 33010602011771号