Cod sursa(job #1314079)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 11 ianuarie 2015 15:06:15
Problema Oite Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <vector>
#define DIM 1000005
using namespace std;

ifstream fin("oite.in");
ofstream fout("oite.out");
vector <pair <int, int> > H[DIM];
vector <int> v(DIM);
int L,N,S,nr;
int main(){
    fin>>N>>L;
    for(int i=1;i<=N;i++)
        fin>>v[i];
    for(int i=1;i<N;i++){
        for(int j=i+1;j<=N;j++){
            S=L-v[i]-v[j];
            for(std::vector <pair <int ,int > >::iterator it=H[S%DIM].begin();it!=H[S%DIM].end() && S>=0;it++)
                if(it->first==S){
                    nr+=it->second;
                }
        }
        for(int j=1;j<i;j++){
            S=v[i]+v[j];
            if(v[i]+v[j]>L)
                continue;
            std::vector <pair <int ,int > >::iterator it;
            for(it=H[S%DIM].begin();it!=H[S%DIM].end();it++)
                if(it->first==S){
                    it->second++;
                    break;
                }
            if(it==H[S%DIM].end())
                H[S%DIM].push_back(make_pair(S,1));
        }
    }
    fout<<nr;
    fin.close();fout.close();
    return 0;
}