Pagini recente » Cod sursa (job #2862175) | Cod sursa (job #1781756) | Cod sursa (job #1230843) | Cod sursa (job #1737839) | Cod sursa (job #2954639)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
unordered_map<long long,bool>h;
struct sume
{
int val;
short x,y;
}sum[1030*1030];
int s,v[1030],lg,start,finish,cnt,val;
short n,i,j,k,l;
bool ok;
long long p[5],ans,x;
short schema[6];
bool cmp(sume a,sume b)
{
return a.val<b.val;
}
long long getHash(short a[])
{
ans=0;
for(l=1;l<=4;++l)
ans=ans+p[l-1]*a[l];
return ans;
}
signed main()
{
p[0]=1;
for(i=1;i<=3;++i)
p[i]=p[i-1]*1025;
fin>>n>>s;
for(i=1;i<=n;++i)
fin>>v[i];
for(i=1;i<=n;++i)
for(j=i+1;j<=n;++j)
if(v[i]!=v[j])
{
++lg;
sum[lg].val=v[i]+v[j];
sum[lg].x=i;
sum[lg].y=j;
}
sort(sum+1,sum+lg+1,cmp);
start=finish=lg;
for(i=1;i<=lg;++i)
{
if(sum[i].val>s/2)
break;
val=s-sum[i].val;
while(sum[finish].val>val)
--finish;
while(sum[start].val>=val)
--start;
++start;
if(start==lg+1)
--start;
if(sum[finish].val!=val)
continue;
for(j=start;j<=finish;++j)
{
if(sum[i].x==sum[j].x || sum[i].x==sum[j].y || sum[i].y==sum[j].x || sum[i].y==sum[j].y)
continue;
schema[1]=sum[i].x;
schema[2]=sum[i].y;
schema[3]=sum[j].x;
schema[4]=sum[j].y;
sort(schema+1,schema+5);
ok=1;
if(ok==1)
{
x=getHash(schema);
if(h[x]==0)
{
++cnt;
h[x]=1;
}
}
}
}
fout<<cnt<<'\n';
return 0;
}