Cod sursa(job #1312549)

Utilizator mariusn01Marius Nicoli mariusn01 Data 9 ianuarie 2015 18:09:10
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#define DIM 1000017

using namespace std;

vector < pair<int, int> > H[DIM];

int n, i, sol, L, j, k, s;
int v[1002];


int main() {
    ifstream fin("oite.in");
    ofstream fout("oite.out");
    fin>>n>>L;
    for (i=1;i<=n;i++)
        fin>>v[i];

    for (i=1;i<n;i++) {
        for (j=i+1;j<=n;j++) {
            // caut L-v[i]-v[j]
            s = L-v[i]-v[j];
            if (s < 0)
                continue;
            for (k = 0; k<H[s%DIM].size(); k++)
                if (H[s%DIM][k].first == s) {
                    sol += H[s%DIM][k].second;
                    break;
                }
        }

        for (j=1;j<i;j++) {
            s = v[i]+v[j];
            if (v[i] + v[j] > L)
                continue;
            //caut in lista H[s%DIM]
            for (k = 0; k<H[s%DIM].size(); k++)
                if (H[s%DIM][k].first == s) {
                    H[s%DIM][k].second ++;
                    break;
                }
            if (k == H[s%DIM].size()) {
                H[s%DIM].push_back(  make_pair(s, 1) );
            }

        }
    }
    fout<<sol<<"\n";

    return 0;
}