虽然知道正解是 set,但是一直不知道自己的代码怎么 hack。
#include<bits/stdc++.h>
#define int unsigned long long
#define endl '\n'
int T;
int n;
int a[100005];
signed main(){
// std::ios::sync_with_stdio(false);
// std::cin.tie(0);
std::cin>>T;
while(T--){
memset(a,0,sizeof(a));
bool fj=0,fo=0;
std::cin>>n;
for(int i=1;i<=n;i++){
std::cin>>a[i];
if(a[i]%2==1)fj=1;
else fo=1;
}
if(fj&&fo)std::cout<<2<<endl;
else{
fj=0,fo=0;
int g=a[1];
for(int i=1;i<=n;i++)g=std::__gcd(g,a[i]);
for(int i=1;i<=n;i++){
a[i]/=g;
if(a[i]%2==1)fj=1;
else fo=1;
}
if(fj&&fo)std::cout<<2*g<<endl;
else if(fo&&!fj){//全偶
int gg=-1;
for(int i=1;i<=n;i++){
a[i]-=2;
if(gg==-1&&a[i]!=0)gg=a[i];
else if(a[i]==0)continue;
else gg=std::__gcd(gg,a[i]);
}
std::cout<<g*gg*2<<endl;
}
else{//全奇
int gg=-1;
for(int i=1;i<=n;i++){
a[i]--;
if(gg==-1&&a[i]!=0)gg=a[i];
else if(a[i]==0)continue;
else gg=std::__gcd(gg,a[i]);
}
std::cout<<gg*g*2<<endl;
}
}
}
return 0;
}