Pagini recente » Cod sursa (job #1400354) | Cod sursa (job #1904218) | Cod sursa (job #2715649) | Cod sursa (job #530920) | Cod sursa (job #2954610)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
unordered_map<long long,long long>first,last,h;
struct sume
{
long long val,x,y;
}sum[1030*1030];
long long n,s,v[1030],i,j,lg,start,finish,cnt;
long long p[5],schema[6],x;
bool cmp(sume a,sume b)
{
return a.val<b.val;
}
long long getHash(long long a[])
{
long long ans=0;
for(int i=1;i<=4;i++)
ans=ans+p[i-1]*a[i];
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];
sort(v+1,v+n+1);
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);
for(i=1;i<=lg;i++)
{
if(first[sum[i].val]==0)
first[sum[i].val]=i;
last[sum[i].val]=i;
}
for(i=1;i<=lg;i++)
{
if(sum[i].val>s/2)
break;
if(!first[s-sum[i].val])
continue;
start=first[s-sum[i].val];
finish=last[s-sum[i].val];
for(j=start;j<=finish;j++)
{
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);
long long ok=1;
for(long long k=2;k<=4;k++)
if(schema[k]==schema[k-1])
ok=0;
if(ok==1)
{
x=getHash(schema);
if(h[x]==0)
{
cnt++;
h[x]=1;
}
}
}
}
fout<<cnt<<'\n';
return 0;
}