Cod sursa(job #1345341)

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

using namespace std;

#define mod 173933
#define maxN 1111
#define mPair pair<long,long>
#define v1 first
#define v2 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(i,j));
}

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.v1<=j) continue;
                ans++;
            }
        }
    }

    printf("%lld",ans);

    return 0;
}