等式數量


Description

集合是基本的數學概念,它是集合論的研究對象。關於集合論最簡單的說法,是在最原始的集合論《樸素集合論》中的定義:集合就是“一堆東西”。集合裏的“東西”,叫作元素。若x是集合A中的元素,記作 x∈A。集合中的元素是互不相同的。 
表示相等關係的式子叫做等式。 
給你一個包含有N個整數的集合,如果從集合中找到三個不同的整數a,b,c使得a+b=c,那麼我們說這個集合包含一個等式。 
你的任務是從集合中找出所有的等式數量。 

Input

每組輸入數據的第一行爲一個整數N (3<=N<=5,000),表示集合中一共有N個不同的整數。之後一行有N個整數,表示集合中的元素,元素的整數值大小爲(-10,000,000~10,000,000)。

Output

對於每組數據輸出一個整數佔一行,表示該集合的等式數量。

Sample Input

43 1 2 5

Sample Output

2

這題:直接做會超時用容器也超時了。
用頭尾查找(頭和尾同時進行處理)
//頭尾查找 
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[5005];
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
  for(i=0;i<n;i++)
   scanf("%d",a+i);
   sort(a,a+n);
  
   int sum=0,l,r;
   for(i=0;i<n;i++)
    { 
      l=0;r=n-1;
     while(l<r)
     {
      if(i==l) l++;
        else if(i==r) r--;
           else if(a[i]<a[r]+a[l])r--;
              else if(a[i]>a[r]+a[l]) l++;
                 else {sum++;r--;}       
      }                      
    }                
    printf("%d\n",sum);         
                          
}    
return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章