Cod sursa(job #2666052)

Utilizator marcumihaiMarcu Mihai marcumihai Data 31 octombrie 2020 19:11:10
Problema Oite Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

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

const long long MOD=666013;
long long n , s;
long long cont=0;
int a[700050];
struct val{
 long long suma;
 long long a;
 long long b;
};
vector <val> v[MOD+5];

void citire()
{
    f>>n>>s;
    for(long long i=1;i<=n;++i)
        f>>a[i];
}

long long cauta(long long x , long long k , long long t)
{
    long long nr=0;
    long long r=x%MOD;
    for(int i=0;i<v[r].size();++i)
    {
        if(x==v[r][i].suma && k!=v[r][i].a && t!=v[r][i].b && t!=v[r][i].a && k!=v[r][i].b)
            ++nr;
    }
    return nr;
}
void rezolvare()
{
    for(int i=1;i<=n;++i)
    {
        for(int j=i+1;j<=n;++j)
        {
            long long sum=a[i]+a[j];
            v[sum%MOD].push_back( {sum , i , j});
        }
    }
    for(int i=1;i<=n;++i)
    {
        for(int j=i+1;j<=n;++j)
        {
            long long sum=a[i]+a[j];
            if(s>sum && !v[(s-sum)%MOD].empty() && cauta(s-sum , i , j)>0)
                cont+=cauta(s-sum , i , j);

        }
    }
    g<<cont/6;
}
int main()
{
    citire();
    rezolvare();
    return 0;
}