Cod sursa(job #1838682)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 1 ianuarie 2017 16:24:34
Problema Oite Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <cstdio>
#include <unordered_map>
#define MAXN 1050

using namespace std;

int c, L;
int a[MAXN];
long long sol;
unordered_map<int, int> m1, m2;

void read()
{
    scanf("%d %d", &c, &L);
    for (int i = 1; i <= c; i++) {
       scanf("%d", &a[i]);
        m2[a[i]]++;
    }
}

void solve()
{
    for (int i = 1; i <= c; i++)
    {
        for (int j = 1; j < i; j++)
            m1[a[i]+a[j]]++;
        for (int j = i+1; j <= c; j++)
            m1[a[i]+a[j]]++;
    }

    for (int i = 1; i <= c; i++)
    {
        for (int j = 1; j <= c; j++) {
            if (i == j) continue;
            int sum = a[i]+a[j];
            int x = m1[sum];
            int y = m1[L-sum];
            sol += m1[L-sum];
            if (sum == L-sum)
                sol -= 2;
        }
    }
    long long scad = 0;
    for (int i = 1; i <= c; i++)
    {
        int x = m1[L-(a[i]<<1)];
        scad += m1[L-(a[i]<<1)];
    }
    for (int i = 1; i <= c; i++)
        scad -= 2*m2[L-(a[i]*3)];
    sol -= (scad<<2);
    sol /= 24;
}

int main()
{
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);

    read();
    solve();
    printf("%lld", sol);

    return 0;
}