Cod sursa(job #198050)

Utilizator CezarMocanCezar Mocan CezarMocan Data 8 iulie 2008 09:12:25
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

struct tool{int a; int b; int c;};

long n,i,j,l,v[1225],nr,s,rez;
vector <tool> h[131072];
tool x[550000];

int main(){
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%d",&n,&l);
for (i=1;i<=n;i++)
    scanf("%d",&v[i]);
sort(v+1,v+n+1);
for (i=1;i<n;i++)
    for (j=i+1;j<=n;j++)
            {
            nr++;
            x[nr].a=v[i]+v[j];    
            x[nr].b=i;
            x[nr].c=j;
            }
for (i=1;i<=nr;i++)
    h[x[i].a&131071].push_back(x[i]);    
for (i=1;i<=nr;i++)
    {
    s=l-x[i].a;
    if (s>0)
        {
        s=s&131071;
        for (j=0;j<h[s].size();j++)
            if ((x[i].a+h[s][j].a==l)&&(x[i].b!=h[s][j].b&&x[i].b!=h[s][j].c&&x[i].c!=h[s][j].b&&x[i].c!=h[s][j].c))
                rez++;   
        }
    }
printf("%d\n",rez/6);
return 0;    
}