Cod sursa(job #2204209)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 14 mai 2018 23:03:55
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#define DIM 1030
#define MOD 666013

using namespace std;

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

int n, s, oaie[DIM];

long long mods;

vector<pair<int, int> > Hash[MOD + 10];

int main(int argc, const char * argv[]) {
    in>>n>>s;
    for(int i = 1; i <= n; ++ i)
        in>>oaie[i];
    for(int i = 1; i <= n; ++ i){
        for(int j = i + 1; j <= n; ++ j){
            int sCurr = s - oaie[i] - oaie[j];
            if(sCurr > 0 && Hash[sCurr % MOD].size()){
                for(auto it : Hash[sCurr % MOD]){
                    if(it.first == sCurr)
                        mods += it.second;
                }
            }
        }
        for(int j = 1; j < i; ++ j){
            int sCurr = oaie[i] + oaie[j];
            int ok = 0;
            if(sCurr > 0 && Hash[sCurr % MOD].size()){
                for(int i = 0; i < Hash[sCurr % MOD].size(); ++ i){
                    if(Hash[sCurr % MOD][i].first == sCurr){
                        ++ Hash[sCurr % MOD][i].second;
                        ok = 1;
                    }
                }
            }
            if(!ok)
                Hash[sCurr % MOD].push_back({sCurr, 1});
        }
    }
    out<<mods;
    return 0;
}