Cod sursa(job #611756)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 3 septembrie 2011 10:28:00
Problema Oite Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
# include <fstream>
# include <vector>
using namespace std;

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

const int MOD = 566013;
long long n, m, cit, sol, a[1050];
struct stu {long long i, j, k;};
vector <stu> v[MOD];

stu make_stu (long long a, long long b, long long c)
{
    stu x;
    x.i = a; x.j = b; x.k = c;
    return x;
}

long long cauta (long long val, long long x, long long y)
{
    long long ret = 0;
    long long nr = val % MOD;
    for (vector <stu> :: iterator it = v[nr].begin (); it != v[nr].end (); ++it)
        if (it -> i == val && (it -> j != x && it -> j != y && it -> k != x && it -> k != y))
            ++ret;
    return ret;
}
int main ()
{
    f >> n >> m;
    for (int i = 1; i <= n; ++i)
        f >> a[i];

    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j)
            v[(a[i] + a[j]) % MOD].push_back (make_stu (a[i] + a[j], i, j));

    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j)
            sol += cauta (m - (a[i] + a[j]), i, j);

    g << sol / 6 << '\n';
    return 0;
}