Cod sursa(job #1786587)
Utilizator | Data | 23 octombrie 2016 12:43:00 | |
---|---|---|---|
Problema | Oite | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.35 kb |
#include<cstdio>
#include<iostream>
using namespace std;
int v[1100];
long long int h[530000],l;
int co[530000];
int res;
int c;
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d %lld",&c,&l);
for(int i=1;i<=c;i++)
{
scanf("%d",&v[i]);
}
for(int i=3;i<c;i++)
{
for(int j=1;j<i-1;j++)
{
long long int p=v[i-1]+v[j];
int to=p%527017;
bool flag=0;
for(int k=to;k<527017;k++)
{
if(h[k]==0)
{
h[k]=p;
co[k]++;
flag=1;
break;
}
else if(h[k]==p)
{
co[k]++;
flag=1;
break;
}
}
if(flag==0)
{
for(int k=0;k<to;k++)
{
if(h[k]==0)
{
h[k]=p;
co[k]++;
break;
}
else if(h[k]==p)
{
co[k]++;
break;
}
}
}
}
for(int j=i+1;j<=c;j++)
{
long long int p=l-v[i]-v[j];
if(p<0)
{
continue;
}
int to=p%527017;
bool flag=0;
for(int k=to;k<527017;k++)
{
if(h[k]==0)
{
flag=1;
break;
}
else if(h[k]==p)
{
res+=co[k];
flag=1;
break;
}
}
if(flag==0)
{
for(int k=0;k<to;k++)
{
if(h[k]==0)
{
break;
}
else if(h[k]==p)
{
res+=co[k];
break;
}
}
}
}
}
printf("%d\n",res);
}