Cod sursa(job #1144750)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 17 martie 2014 15:44:01
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#include<algorithm>
#include<vector>

using namespace std;

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

const int nmax = 1030;
const int mod = 666013;
int a[ nmax ];

struct gr{ int x, y; };
vector <gr> h[ mod ];

inline gr ret_str( int x, int y ) {
    gr sol;
    sol.x = x; sol.y = y;
    return sol;
}
int main()
{
    int n, s, key, x, y;
    long long sol;
    fin>>n>>s;
    for( int i = 0; i < n; ++ i ) {
        fin>>a[i];
    }
    sort( a, a + n );
    sol = 0;
    for( int i = 0; i < n; ++ i ) {
        for( int j = 0; j < i; ++ j ) {
            key = a[i] + a[j];
            key %= mod;
            h[ key ].push_back( ret_str( j, i ) );
            key = s - a[i] - a[j];
            if ( key >= 0 ) {
                key %= mod;
                for( int l = 0; l < (int)h[ key ].size(); ++ l ) {
                    x = h[ key ][l].x;
                    y = h[ key ][l].y;
                    if ( a[x] + a[y] + a[i] + a[j] == s && y < j ) {
                        ++ sol;
                    }
                }
            }
        }
    }
    fout<<sol<<'\n';
    fin.close();
    fout.close();
    return 0;
}