感觉并不是很困难的题阿。
题意:给你 \(n\),让你构造长度为 \(2n\) 的序列 \(a\),使得 \(a_1a_2+a_3a_4+\dots+a_{2n-1}a_{2n}=a_1\times(a_2+a_3)\times\dots\times (a_{2n-2}+a_{2n-1})\times a_{2n}\)。但要求 \(a\) 中没有值为 \(0\) 且构造出来这两个相等的值也不是 \(0\)。
刚开始做的时候没有看见不能构造出这两个值是 \(0\) 的条件,直接把 \(a_2+a_3\) 这类东西全部赋值为 \(1,-1\) 使得整个式子值为 \(0\),最后微调一下 \(a_1,a_{2n}\)。
后面发现了这个限制,那么我们在上述做法的基础下再微调。我们发现对于这个序列这么多元素整体分析是困难的,考虑简化问题。我们既然不能把下面那个式子的一堆连乘赋为 \(0\),那么我们把他们赋为 \(1\) 即可,最后仍然只需要微调 \(a_1\) 和 \(a_{2n}\)。
那么我们把中间的 \(a_2\sim a_{2n-1}\) 全部赋值为 \(-1,2,-1,2,\dots,-1,2\),代回得 \(-a_1-(2n-4)+2a_{2n}=a_1a_{2n}\)。
设 \(a_1=x,a_{2n}=y\),则 \(-x+2y-(2n-4)=xy\),移项变成 \(xy+x-2y=-(2n-4)\),这是一个因式分解的经典形式,转化一下变成 \((x-2)(y+1)=-2n+2=-2(n-1)\)。
由于只需要构造一组合法解,随便对应一下 \(x-2=n-1,y+1=-2\) 得 \(x=n+1,y=-3\)。
代码实现是容易的。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n;
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n;if(n==2)cout<<"1 -3 -3 1 ";else{for(int i=1;i<=(n<<1);i++){if(i==1)cout<<n+1<<" ";else if(i==(n<<1))cout<<-3;else if(i&1)cout<<2<<" ";else cout<<-1<<" ";}}cout<<"\n";}return 0;
}