Cod sursa(job #2843798)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 februarie 2022 22:54:43
Problema Oite Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define MOD 10007
/// TONI BO$$ was here
/// #MLC

using namespace std;
struct node
{
    int val;
    int p2;
    node *next;
}v[MOD], nodes[1048577];
int m;

int c[1025];

int main()
{
    int n, l, i, j, m, sum;
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);
    scanf("%d%d" ,&n, &l);
    for(i = 1; i <= n; i++)
        scanf("%d", &c[i]);
    for(i = 1; i < n; i++)
        for(j = i + 1; j <= n; j++)
        {
            ++m;
            nodes[m].next = v[(c[i] + c[j]) % MOD].next;
            v[(c[i] + c[j]) % MOD].next = &nodes[m];
            nodes[m].val = c[i] + c[j];
            nodes[m].p2 = j;
        }
    int rez = 0;
    node *point;
    for(i = 3; i < n; i++)
        for(j = i + 1; j <= n; j++)
        {
            sum = l - c[i] - c[j];
            point = v[sum % MOD].next;
            if(sum < 0)
                continue ;
            while(point != nullptr)
            {
                if(point->val == sum && point->p2 < i)
                    rez++;
                point = point->next;
            }
        }
    printf("%d\n", rez);

    return 0;
}