Pagini recente » Cod sursa (job #1003896) | Cod sursa (job #2854637) | Cod sursa (job #602221) | Cod sursa (job #884407) | Cod sursa (job #612224)
Cod sursa(job #612224)
#include<iostream>
#include<fstream>
#include<list>
using namespace std;
ifstream in("oite.in");
ofstream out("oite.out");
struct per {
unsigned int lana;
short o1,o2;
};
unsigned int n,L;
unsigned int x[1036];
list<per> l[666023];
inline int h(const per &q) {
return (q.lana)%666013;
}
inline bool ver(const per &p1, const per &p2) {
if(p1.o1==p2.o1 || p1.o1==p2.o2 || p1.o2==p2.o1 || p1.o2==p2.o2)
return false;
if(p1.o1>p1.o2 || p1.o2>p2.o1 || p2.o1>p2.o2)
return false;
return true;
}
inline int findd(const per &nr,const int &ll) {
list<per>::iterator it;
int nu=0;
for(it=l[ll%666013].begin();it!=l[ll%666013].end(); ++it)
if((*it).lana==ll && ver((*it),nr))
++nu;
return nu;
}
inline void adauga(const per &nr) {
l[h(nr)].push_front(nr);
}
int main() {
int i,j;
long long nrmod=0;
per mm;
in >> n >> L;
for(i=1;i<=n;++i)
in >> x[i];
for(i=1;i!=n;++i)
for(j=i+1;j<=n;++j) {
mm.lana=x[i]+x[j];
mm.o1=i;
mm.o2=j;
if(mm.lana<L)
adauga(mm);
}
for(i=1;i!=n;++i)
for(j=i+1;j<=n;++j) {
mm.lana=x[i]+x[j];
mm.o1=i;
mm.o2=j;
nrmod+=findd(mm,L-mm.lana);
}
out << nrmod;
return 0;
}