嵊州普及Day2T1

题意:对于给出的数列,有多少数可表示为另两数的和。

思路:先排个序,桶排思路。以一个数组储蓄所有出现的和。最后循环判断是否b[i]>0。

见代码:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,sum,a[100001],b[100001];
bool cmp(int x,int y)
{
    return x<y;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        b[a[i]+a[j]]++;
    }
    for(int i=3;i<=n;i++)
    if(b[i]>0)
    sum++;
    cout<<sum;
    return 0;
}

好题哉!!!

原文地址:https://www.cnblogs.com/qing1/p/11182122.html