题意:
求1<=m<j,gcd(a[i],2a[j])>1的最大下标对数
思路:
将偶数放前面,后面的数一定都可以对答案做出贡献,然后暴力跑奇数的情况即可.
#include<bits/stdc++.h>
using namespace std;
const int maxn=2005;
int a[maxn];
int ans[maxn],d[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,i,j,t;
cin>>t;
while(t--)
{
int cnt=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
if(a[i]%2==0) ans[cnt++]=a[i];
}
int m1=cnt;
for(i=0;i<n;i++)
{
if(a[i]%2==1)
{
ans[cnt++]=a[i];
}
}
int sum=0;
for(i=0;i<n;i++)
{
if(i<m1-1)
{
sum+=(n-i-1);
}
else
{
for(j=i+1;j<n;j++)
{
if(__gcd(ans[i],2*ans[j])>1)
{
sum++;
}
}
}
}
cout<<sum<<endl;
}
}