思路:只有1和2的时候或者相等的时候满足2的i次方的2的j次方等于2的j次方的2的i次方。
代码
#include<iostream>
#include<algorithm>
#include<map>
//用map存储当前数字出现的次数
using namespace std;
typedef long long ll;
const int N=2e5+10;
int t,n,a[N];
int main()
{
cin>>t;
while(t--)
{
ll ans=0;
scanf("%d",&n);
map<int,int>mp;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ans+=mp[a[i]];//加上前面相等的次数
if(a[i]==1)ans+=mp[2];//如果等于1要加上前面等于2的次数
if(a[i]==2)ans+=mp[1];//如果等于2要加上前面等于1的次数
mp[a[i]]++;//更新出现的次数
}
cout<<ans<<endl;//输出答案
}
return 0;
}