Cod sursa(job #1345358)

Utilizator atatomirTatomir Alex atatomir Data 17 februarie 2015 15:58:32
Problema Oite Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

#define mod 73933
#define maxN 1111
#define mPair pair<long,long>
#define sum first
#define pos second

long n,i,j,l,p;
long a[maxN];
vector<mPair > Hash[mod];

long long ans;

inline long getId(long x){return (x)%mod;}
void addPair(long i,long j){
    long id = getId(a[i]+a[j]);
    Hash[id].push_back(make_pair(a[i]+a[j],i));
}

int main()
{
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);

    scanf("%ld %ld",&n,&l);
    for(i=1;i<=n;i++) scanf("%ld",&a[i]);

    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            addPair(i,j);

    for(i=1;i<n;i++){
        for(j=i+1;j<=n;j++){
            long target = l-a[i]-a[j];
            long id = getId(target);

            for(p=0;p<Hash[id].size();p++){
                mPair newP = Hash[id][p];

                if(newP.sum!=target) continue;
                if(newP.pos<=j) continue;
                ans++;
            }
        }
    }

    printf("%lld",ans);

    return 0;
}