Pagini recente » Cod sursa (job #1481875) | Cod sursa (job #1705305) | Cod sursa (job #459149) | Cod sursa (job #2559328) | Cod sursa (job #611781)
Cod sursa(job #611781)
#include<iostream>
#include<fstream>
#include<list>
using namespace std;
ifstream in("oite.in");
ofstream out("oite.out");
struct per {
int lana,o1,o2;
};
int n,L;
int x[1026];
list<per> l[666013];
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;
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,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) {
if(x[i]!=x[j]) {
mm.lana=x[i]+x[j];
mm.o1=i;
mm.o2=j;
adauga(mm);
}
}
for(i=1;i!=n;++i)
for(j=i+1;j<=n;++j) {
if(x[i]!=x[j]) {
mm.lana=x[i]+x[j];
mm.o1=i;
mm.o2=j;
nrmod+=findd(mm,L-mm.lana);
}
}
out << nrmod/4;
return 0;
}