Cod sursa(job #2472813)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 12 octombrie 2019 22:55:34
Problema Oite Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("oite.in");
ofstream g("oite.out");

const int MOD = 999983, NMAX = (1 << 10) + 5;

int N, K, A[NMAX];

vector < pair < int, int > > H[MOD + 5];

long long ans = 0;

static inline void Add (int Level, int X)
{
    bool Ok = false;

    for(auto &it : H[Level])
        if(it.first == X)
        {
            Ok = true;

            ++it.second;

            break;
        }

    if(!Ok)
        H[Level].push_back({X, 1});

    return;
}

static inline int Query (int Level, int X)
{
    int r = 0;

    for(auto it : H[Level])
        if(it.first == X)
        {
            r = it.second;

            break;
        }

    return r;
}

static inline void Read ()
{
    f.tie(NULL);

    f >> N >> K;

    for(int i = 1; i <= N; ++i)
        f >> A[i];

    return;
}

static inline void Solve ()
{
    for(int i = 1; i < N; ++i)
    {
        for(int j = i + 1; j <= N; ++j)
        {
            int Sum = A[i] + A[j];

            int Diff = K - Sum;

            if(Diff < 0)
                continue;

            ans += 1LL * Query(Diff % MOD, Diff);
        }

        for(int j = 1; j < i; ++j)
        {
            int Sum = A[i] + A[j];

            Add(Sum % MOD, Sum);
        }
    }

    g << ans << '\n';

    return;
}

int main()
{
    Read();

    Solve();

    return 0;
}