Cod sursa(job #2846189)

Utilizator AswVwsACamburu Luca AswVwsA Data 8 februarie 2022 21:34:48
Problema Oite Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <algorithm>
#include <unordered_map>
#include <vector>
using namespace std;

const int NMAX = 1024, BIG = 1048576;
int v[NMAX + 3];

unordered_map <int, vector <pair <int, int> > > m;
unordered_map <int, vector <pair <int, int> > > :: iterator it, it2;

inline bool check (pair <int, int> a, pair <int, int> b)
{
    return !(a.first == b.first or a.first == b.second or a.second == b.first or a.second == b.second);
}
int main()
{
    ifstream cin("oite.in");
    ofstream cout("oite.out");
    int n, s, i, j;
    cin >> n >> s;
    for (i = 1; i <= n; i++)
        cin >> v[i];
    for (i = 1; i + 1 <= n; i++)
        for (j = i + 1; j <= n; j++)
            m[v[i] + v[j]].push_back({i, j});
    int ans = 0;
    for (it = m.begin(); it != m.end(); it++)
    {
        int need = s - it->first;
        it2 = m.find(need);
        if (it2 == m.end())
            continue;
        for (i = 0; i < it->second.size(); i++)
            for (j = 0; j < it2->second.size(); j++)
                if (check(it->second[i], it2->second[j]))
                {
                    ans++;
                    /*cout << it->second[i].first << " " << it->second[i].second
                         << " " << it2->second[j].first << " " << it2->second[j].second
                         << "\n";*/
                }
    }
    cout << ans / 6;
}