“选出来三个六学家,他们的编号是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*n/2)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int ar[2005],cha[400005]; 4 int main(){ 5 ios::sync_with_stdio(0); 6 cin.tie(0);cout.tie(0); 7 int n,i,j,ans=0; 8 cin>>n; 9 if(n<3){ 10 cout<<0<<endl; 11 return 0; 12 } 13 memset(cha,0,sizeof cha); 14 cin>>ar[0]>>ar[1]; 15 cha[ar[1]-ar[0]+200000]=1; 16 for(i=2;i<n;i++){ 17 cin>>ar[i]; 18 ans+=cha[ar[i]+200000]; 19 for(j=0;j<i;j++) 20 cha[ar[i]-ar[j]+200000]++; 21 } 22 cout<<ans; 23 24 return 0; 25 }
原文地址:https://www.cnblogs.com/stelayuri/p/12239004.html
时间: 2024-11-09 14:53:24