Cod sursa(job #198041)

Utilizator CezarMocanCezar Mocan CezarMocan Data 8 iulie 2008 08:44:20
Problema Oite Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 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[666213];
tool x[1050000];

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++)
    printf("%d ",x[i]);
printf("\n");*/
for (i=1;i<=nr;i++)
    h[x[i].a%666013].push_back(x[i]);    
//printf("%d\n",h[1][0].a);
//printf("%d\n",h[3].size());
/*for (i=1;i<=8;i++)
    {
    for (j=0;j<h[i].size();j++)
        printf("%d ",h[i][j].a);
    printf("\n");    
    }*/
for (i=1;i<=nr;i++)
    {
    s=l-x[i].a;
    s=s%666013;
    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))
            {
//            printf("%d %d %d %d %d %d\n",x[i].a,x[i].b,x[i].c,h[s][j].a,h[s][j].b,h[s][j].c);
            rez++;   
            }
    }
printf("%d\n",rez/6);
return 0;    
}