Cod sursa(job #1457570)

Utilizator lflorin29Florin Laiu lflorin29 Data 3 iulie 2015 17:31:10
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cassert>
#include <vector>
#include <algorithm>
#define pb push_back
#define ft first
#define sd second
using namespace std;

const int wolf = 9973;
vector < pair <int, int> > v[wolf];

inline void ss (int value , int i){
    v[value % wolf].pb({value , i});
}

inline int ways (int value, int k){
    int xx = (value % wolf < 0 ? - (value % wolf) : value % wolf),
    way = 0;
    for (const auto it : v[xx])
        way += (it.ft== value && it.sd > k);
    return way;
}

int main(){
    ifstream cin ("oite.in");
    ofstream cout ("oite.out");
    int c , s;
    cin >> c >> s;
    vector <int> lol(c);
    for (auto &it : lol)
        cin >> it;
    sort(lol.begin(), lol.end());
    for (int i = 0 ; i < c - 1; i++)
        for (int j = i + 1 ; j < c ; j ++ )
           ss(lol[i] + lol[j], i);
    int ll(0);
    for (int i = 0 ; i < c - 1; i++)
        for (int j = i + 1 ; j < c; j ++)
           if (s - lol[i] - lol[j] >= 0)
              ll += ways(s - lol[i] - lol[j], j);
    cout << ll;
    return 0;
}