Pagini recente » Cod sursa (job #2027781) | Cod sursa (job #211406) | Cod sursa (job #901377) | Cod sursa (job #2514399) | Cod sursa (job #730508)
Cod sursa(job #730508)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
struct oita {
int val;
short a,b;
};
vector <oita> v[10133];
int a[1025];
inline bool cmp(const oita a, const oita b)
{
return a.val<=b.val;
}
long long cauta(oita x)
{
int k,p,q,mij,c,n,s;
k=x.val%10133;
p=0;
q=v[k].size()-1;
n=q;
s=0;
c=0;
while(p<=q) {
mij=(p+q)/2;
if(v[k][mij].val<x.val)
p=mij+1;
else if(v[k][mij].val>x.val)
q=mij-1;
else {
c=1;
break;
}
}
if(c==0)
return 0;
while((v[k][mij].val==v[k][mij-1].val))
mij--;
while(v[k][mij].val==x.val) {
if((v[k][mij].val==x.val)&&(v[k][mij].a!=x.a)&&(v[k][mij].a!=x.b)&&(v[k][mij].b!=x.a)&&(v[k][mij].b!=x.b))
s++;
mij++;
}
return s;
}
inline void adauga(oita x)
{
v[x.val%10133].push_back(x);
}
int main ()
{
int n,s,i,j,k;
long long nr;
oita x;
ifstream f("oite.in");
ofstream g("oite.out");
f>>n>>s;
for(i=1;i<=n;i++)
f>>a[i];
f.close();
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if((a[i]+a[j])<=s) {
x.val=a[i]+a[j];
x.a=i;
x.b=j;
adauga(x);
}
for(i=0;i<=10122;i++)
sort(v[i].begin(),v[i].end()+1,cmp);
for(i=0;i<=10122;i++) {
k=v[i].size()-1;
for(j=0;j<k;j++)
if(v[i][j].val>v[i][j+1].val)
while(1);
}
nr=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++) {
x.val=s-(a[i]+a[j]);
if(x.val>=0) {
x.a=i;
x.b=j;
nr=nr+cauta(x);
}
}
g<<nr/6;
g.close();
return 0;
}