“选出来三个六学家,他们的编号是i,j,k,满足i<j<k,且a[k]=a[j]-a[i]”
所以输入第i个数a[i]时,直接让答案加上前i-1个数中能构成差值为a[i]的数量即可
然后让此时输入的数作为上式中的a[j],将i-1到1作为a[i],列出i-1个可能的a[k]存起来即可
时间复杂度为O(n^2)
#include<bits/stdc++.h> using namespace std; int ar[2005],cha[400005]; int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,i,j,ans=0; cin>>n; if(n<3){ cout<<0<<endl; return 0; } memset(cha,0,sizeof cha); cin>>ar[0]>>ar[1]; cha[ar[1]-ar[0]+200000]=1; for(i=2;i<n;i++){ cin>>ar[i]; ans+=cha[ar[i]+200000]; for(j=0;j<i;j++) cha[ar[i]-ar[j]+200000]++; } cout<<ans; return 0; }