Cod sursa(job #223029)

Utilizator mika17Mihai Alex Ionescu mika17 Data 26 noiembrie 2008 18:37:30
Problema Oite Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <map>

using namespace std;

typedef multimap <int , pair<int,int> > tab_type;
typedef tab_type :: iterator it_type;

int main()
{
        ifstream fin("oite.in");
        ofstream fout("oite.out");

        int N,L,A[1024];

        fin>>N>>L;

        for(int i = 0; i < N; ++i)
         fin>>A[i];

        tab_type tab;

        for(int i = 0; i < N - 1; ++i)
         for(int j = i + 1; j < N; ++j)
          tab.insert( make_pair(A[i] + A[j], make_pair(i,j) ) );


        int cnt = 0;
        for(int i = 0; i < N - 1; ++i)
         for(int j = i + 1; j < N; ++j)

          if(tab.find(L - A[i] - A[j]) != tab.end()  )
          {
           it_type fi = tab.lower_bound(L - A[i] - A[j]),
            la = tab.upper_bound(L - A[i] - A[j]);

           for(; fi != la; ++fi )
            if( fi -> second . first > j)
             ++cnt;
          }
          
        fout<<cnt;

        /*
        for(int i = 0; i < N - 1; ++i)
         for(int j = i + 1; j < N; ++j)
          if(tab.find(A[i] + A[j]) != tab.end() )
          {
           fout << A[i] + A[j] << "=> ";
           //tab[ A[i] + A[j] ] . first  << ' ' << tab[ A[i] + A[j] ] . second << endl;;
           it_type fi = tab.lower_bound(A[i] + A[j]),
            la = tab.upper_bound(A[i] + A[j]);

           for(; fi != la; ++fi )
            fout << (*fi).second.first << ' ' << (*fi).second.second << endl;
          }
        */

        return 0;
}