Cod sursa(job #32195)

Utilizator azotlichidAdrian Vladu azotlichid Data 17 martie 2007 14:31:33
Problema Oite Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>

#define FOR(i, N, M) for (int i = (int)(N); i <= (int)(M); ++i)
#define REP(i, N) for (int i = 0; i < (int)(N); ++i)

typedef long long LL;

using namespace std;

map<int, int> M;
map<int, int> :: iterator it;
int N, L, a[1024];

int main(void)
{
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);
    scanf("%d %d", &N, &L);
    REP(i, N) scanf("%d", &a[i]);

    LL Ans = 0;
    REP(i, N)
    {
        FOR(j, i+1, N-1)
            Ans += M[L-a[i]-a[j]];
        FOR(j, 0, i-1)
        {
            if ((it = M.find(a[i]+a[j])) == M.end())
                M[a[i]+a[j]] = 1;
            else
                ++ it->second;
        }
    }

    printf("%lld\n", Ans);
    return 0;
}