Cod sursa(job #686306)

Utilizator SpiderManSimoiu Robert SpiderMan Data 21 februarie 2012 16:04:13
Problema Oite Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std;

const char *FIN = "oite.in", *FOU = "oite.out";
const int MOD = 206713, MAX = 1040;

int N, M, sol, V[MAX];
vector < pair < int, pair <int, int> > > G[MOD];

inline int search (int nr, int i, int j) {
    if (nr < 0) return 0;
    int sl = 0, val = nr % MOD;
    for (typeof (G[val].begin ()) it = G[val].begin (); it != G[val].end (); ++it)
        if (it -> first == val && (it -> second.first != i && it -> second.first != j &&
                                   it -> second.second != i && it -> second.second != j))
            sl += 1;
    return sl;
}

int main (void) {
    freopen (FIN, "r", stdin);

    scanf ("%d %d", &N, &M);
    for (int i = 1; i <= N; ++i)
        scanf ("%d", V + i);
    sort (V + 1, V + N + 1);
    for (int i = 1; i <= N; ++i)
        for (int j = i + 1; j <= N; ++j)
            G[(V[i] + V[j]) % MOD].push_back (make_pair (V[i] + V[j], make_pair (i, j)));
    for (int i = 1; i <= N; ++i)
        for (int j = i + 1; j <= N; ++j)
            sol += search (M - V[i] - V[j], i, j);
    fprintf (fopen (FOU, "w"), "%d", sol / 6);
}