Cod sursa(job #1144421)

Utilizator felixiPuscasu Felix felixi Data 17 martie 2014 07:51:07
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<vector>

using namespace std;

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

const int NMAX= 1024, MOD= 696961;

int v[ NMAX+1 ];
int n, S, sol;

vector <int>  H[ MOD ];

void RASP( int x ) {
    int k= x % MOD;
    for( vector<int>::iterator it=H[k].begin();  it!=H[k].end();  ++it ) {
        if( *it == x )
            sol++;
    }
}

inline int get_number() {
    char c;
    int nr= 0;
    in.get(c);
    while( c>47 && c<58 ) {
        nr= nr*10 + c-48;
        in.get(c);
    }
    return nr;
}

int main()
{

    in >> n >> S;  in.get();
    for( int i= 1;  i<=n;  ++i ) {
        v[i]= get_number();
    }

    for( int i= 1;  i<n;  ++i )  {
        for( int j= i+1;  j<=n;  ++j ) {
            if( S >= v[i]+v[j] ) {
                RASP( S-v[i]-v[j] );
            }
        }
        for( int j= i-1;  j>0;  --j ) {
            H[ ( v[i]+v[j] ) % MOD ].push_back( v[i]+v[j] );
        }
    }
    out << sol << '\n';
    return 0;
}