题意: 解法: 将数从小到大排序,然后暴力枚举数对匹配即可,当a[i]*a[j]>4e5时break. 因为数两两不同,下表和i+j<=4e5, 对于a[i]=1,最多匹配4e5/1次, 对于a[i]=2,最多匹配4e5/2次, ... 对于a[i]=k,最多匹配4e5/k次. 最坏复杂度也只有O(n*log). code: #include<bits/stdc++.h> #define int long long #define PI pair<int,int> using namespace std; const int maxm=2e5+5; PI a[maxm]; int n; void solve(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].first; a[i].second=i; } sort(a+1,a+1+n); int ans=0; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ int x=a[i].first*a[j].first; if(x>4e5)break; int y=a[i].second+a[j].second; if(x==y)ans++; } } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0);cin.tie(0); int T;cin>>T;while(T--) solve(); return 0; }