Cod sursa(job #2623549)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 3 iunie 2020 13:29:45
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
	
#include <fstream>
	
#include <vector>
	
using namespace std;
	
ifstream fin("oite.in");
	
ofstream fout("oite.out");
	
 
	
typedef long long ll;
	
 
	
const int MOD=10847;
	
 
	
int c,a[1025];
	
vector < pair <ll,int> > v[MOD+1];
	
ll l;
	
 
	
void read()
	
{
	
    fin>>c>>l;
	
 
	
    for(int i=1;i<=c;i++)
	
        fin>>a[i];
	
}
	
 
	
void solve()
	
{
	
    int ans=0;
	
 
	
    for(int i=1;i<c;i++)
	
    {
	
        for(int j=i+1;j<=c;j++)
	
        {
	
            ll dif=l-a[i]-a[j];
	
 
	
            if(dif<0)
	
                continue;
	
 
	
            for(int k=0;k<v[dif%MOD].size();k++)
	
                if(v[dif%MOD][k].first==dif)
	
                {
	
                    ans+=v[dif%MOD][k].second;
	
                    break;
	
                }
	
        }
	
 
	
        for(int j=1;j<i;j++)//ma asigur ca un element nu apare de mai multe ori intr-o pereche
	
        {
	
            bool found=false;
	
 
	
            ll s=a[i]+a[j];
	
 
	
            if(s>l)
	
                continue;
	
 
	
            for(int k=0;k<v[s%MOD].size();k++)
	
                if(v[s%MOD][k].first==s)
	
                {
	
                    v[s%MOD][k].second++;
	
                    found=true;
	
                    break;
	
                }
	
 
	
            if(!found)
	
                v[s%MOD].push_back({s,1});
	
        }
	
    }
	
 
	
    fout<<ans;
	
}
	
 
	
int main()
	
{
	
    read();
	
    solve();
	
 
	
    return 0;
	
}