Cod sursa(job #795304)

Utilizator vlad2901Vlad Berindei vlad2901 Data 8 octombrie 2012 02:00:00
Problema Oite Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <vector>

using namespace std;

#define MOD 666013
#define CMAX 1024

struct sum2
{
    int o1, o2;
    int sum;
};

vector<sum2> H[MOD];

int L, C;

int v[CMAX];

int get(int o1, int o2, int sum)
{
    int mod = sum % MOD;
    int nr = 0;

    for(int i=0;i<H[mod].size();++i)
    {
        if(H[mod][i].sum == sum && H[mod][i].o1 > o1 && H[mod][i].o2 > o2 && H[mod][i].o1 > o2 && H[mod][i].o2 > o1)
        {
            ++nr;
        }
    }

    return nr;
}

int main()
{

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

    scanf("%d %d", &C, &L);

    for(int i=0;i<C;++i)
    {
        scanf("%d", &v[i]);
    }

    for(int i=0;i<C;++i)
    {
        for(int j=i+1;j<C;++j)
        {
            sum2 s;
            s.o1 = i;
            s.o2 = j;
            s.sum = v[i] + v[j];

            H[s.sum%MOD].push_back(s);
        }
    }

    long long sol = 0;

    for(int i=0;i<C;++i)
    {
        for(int j=i+1;j<C;++j)
        {
            sol += get(i, j, L - v[i] - v[j]);
        }
    }

    printf("%lld", sol);




    return 0;
}