题意:
求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; } }