Cod sursa(job #1144733)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 17 martie 2014 15:21:19
Problema Oite Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<vector>

using namespace std;

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

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

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

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];
        for( int j = 0; j < i; ++ j ) {
            key = a[i] + a[j];
            key %= mod;
            h[ key ].push_back( ret_str( j, i ) );
        }
    }
    sol = 0;
    for( int i = 0; i < n; ++ i ) {
        for( int j = i + 1; j < n; ++ j ) {
            key = s - a[i] - a[j];
            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 && x > j ) {
                    ++ sol;
                }
            }
        }
    }
    fout<<sol<<'\n';
    fin.close();
    fout.close();
    return 0;
}