CF1541B Pleasant Pairs(思维+桶+枚举)
思路:
首先\(O(n^{2})\)的暴力不难想。
题目中有个条件是\(a[i]<=2*n\)
也就是说\(a[i]*a[j]<=2*n\)
这样第二层循环的范围就有所缩小
最坏情况下第二层会跑\(2*n*(1+1/2+1/3+……+1/n)\)
即\(O(nlogn)\)
最后要记得开\(long long\)
代码:
const int maxn=2e5+100;
ll n,a[maxn],b[maxn];
int main(){
int _=read;
while(_--){
n=read;
rep(i,1,n) a[i]=read,b[a[i]]=i;
sort(a+1,a+1+n);
ll res=0;
rep(i,1,n)
for(ll j=i+1;j<=n&&a[i]*a[j]<=2*n;j++)
if(a[i]*a[j]==b[a[i]]+b[a[j]]) res++;
cout<<res<<endl;
}
return 0;
}