Cod sursa(job #2606756)

Utilizator As932Stanciu Andreea As932 Data 28 aprilie 2020 15:23:45
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");

typedef long long ll;

const int MOD=100847;

int c,a[1025];
vector < pair <ll,int> > v[MOD+1];
ll l;

void read()
{
    fin>>c>>l;

    for(int i=1;i<=c;i++)
        fin>>a[i];
}

void solve()
{
    int ans=0;

    for(int i=1;i<c;i++)
    {
        for(int j=i+1;j<=c;j++)
        {
            ll dif=l-a[i]-a[j];

            if(dif<0)
                continue;

            for(int k=0;k<v[dif%MOD].size();k++)
                if(v[dif%MOD][k].first==dif)
                {
                    ans+=v[dif%MOD][k].second;
                    break;
                }
        }

        for(int j=1;j<i;j++)//ma asigur ca un element nu apare de mai multe ori intr-o pereche
        {
            bool found=false;

            ll s=a[i]+a[j];

            if(s>l)
                continue;

            for(int k=0;k<v[s%MOD].size();k++)
                if(v[s%MOD][k].first==s)
                {
                    v[s%MOD][k].second++;
                    found=true;
                    break;
                }

            if(!found)
                v[s%MOD].push_back({s,1});
        }
    }

    fout<<ans;
}

int main()
{
    read();
    solve();

    return 0;
}