Pagini recente » Cod sursa (job #3204716) | Cod sursa (job #377443) | Cod sursa (job #2129993) | Cod sursa (job #948771) | Cod sursa (job #396390)
Cod sursa(job #396390)
#include<fstream>
#include<algorithm>
using namespace std;
const char iname[]="oite.in";
const char oname[]="oite.out";
const int mod=22307;
const int maxn=2024;
ifstream f(iname);
ofstream g(oname);
int i,j,n,k,a[maxn],l;
long long rez;
struct nod
{
int v;
int w;
nod *next;
nod(){v=w=0;next=0;};
}* h[mod];
void insert(int x)
{
int l=x%mod;
nod *k;
for(k=h[l];k&&k->v!=x;k=k->next);
if(k)
{
++k->w;
return;
}
k=new nod;
k->v=x;
k->w=1;
k->next=h[l];
h[l]=k;
}
int many(int x)
{
int l=x%mod;
nod *k;
for(k=h[l];k&&k->v!=x;k=k->next);
if(k)
return k->w;
return 0;
}
void drop(int x)
{
int l=x%mod;
if(h[l]==0)
return;
nod *k;
if(h[l]->v==x)
if(h[l]->w==1)
{
k=h[l];
h[l]=h[l]->next;
delete k;
return;
}
else
{
--h[l]->w;
return;
}
for(k=h[l];k->next&&k->next->v!=x;k=k->next);
if(k->next)
if(k->next->w==1)
{
nod *r=k->next;
k->next=r->next;
delete r;
}
else
--k->next->w;
}
int main()
{
f>>n>>l;
for(i=0;i<n;++i)
f>>a[i];
sort(a,a+n);
for(i=2;i<n;++i)
for(j=i+1;j<n;++j)
insert(a[i]+a[j]);
for(i=1;i<n;++i)
{
for(j=0;j<i;++j)
rez+=many(l-a[i]-a[j]);
for(j=i+2;j<n;++j)
drop(a[i+1]+a[j]);
}
g<<rez<<"\n";
}