ZJNU 2356

“选出来三个六学家,他们的编号是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;
}
原文地址:https://www.cnblogs.com/stelayuri/p/12239004.html