题目:
B. Pleasant Pairs
链接:link
题意:一个数组,每个数都不相同,找到数组中满足(下标之和=对应元素相乘)i+j=ai*aj(i<j)
思路:直接暴力求解的话会tlm,因为i+j=ai*aj->j=ai*aj-i,所以满足该条件的j的取值如下,所以在第二层循环的时候让j的取值=ai-i每次循环完➕a[i],这样子省下来很多不必要的判断。
#include<iostream>
#include<math.h>
#include<map>
#define ll long long
using namespace std;
ll int t;
const int maxn=10000000;
ll int a[maxn];
map<int,int>m;
int main()
{
cin>>t;
while (t--) {
ll int n;
ll int ans=0;
cin>>n;
for (ll int i=1; i<=n; i++) {
cin>>a[i];
}
for (ll int i=1; i<=n; i++) {
for (ll int j=a[i]-i; j<=n; j+=a[i]) {
if (j<=i) {
continue;
}
if (a[i]*a[j]==i+j) {
ans++;
}
}
}
cout<<ans<<endl;
}
}