Cod sursa(job #1663213)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 25 martie 2016 17:22:17
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("oite.in");
ofstream g("oite.out");
const int modulo=4999;
vector <pair <int ,int> > H[modulo*3];
int n,i,j,k;
int a[1025];
long long suma,sol;

int query (int sum)
{
    int r,k,siz;
    r=sum%modulo+modulo;
    siz=H[r].size();
    for (k=0;k<siz;k++)
     if (H[r][k].first==sum)
      return H[r][k].second;
    return 0;
}

void add (int sum)
{
    int r,k,siz;
    r=sum%modulo+modulo;
    siz=H[r].size();
    for (k=0;k<siz;k++)
     if (H[r][k].first==sum)
     {
         H[r][k].second++;
         return;
     }
    H[r].push_back(make_pair(sum,1));
}

int main()
{
    f>>n>>suma;
    for (i=1;i<=n;i++)
        f>>a[i];
    for (i=1;i<n;i++)
    {
        for (j=i+1;j<=n;j++)
            sol+=query(suma-a[i]-a[j]);
        for (j=1;j<i;j++)
            add(a[i]+a[j]);
    }

    g<<sol;
    return 0;
}