Pagini recente » Cod sursa (job #2066242) | Cod sursa (job #2766777) | Cod sursa (job #3150511) | Istoria paginii runda/dacanuacumatunciniciodata/clasament | Cod sursa (job #730930)
Cod sursa(job #730930)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<string.h>
using namespace std;
struct oita {
int val;
short a,b;
};
vector <oita> v[206713];
int a[1025];
char c[10001];
inline int cauta(oita x)
{
int k,s;
k=x.val%206713;
s=0;
for(vector <oita>::iterator it=v[k].begin();it!=v[k].end();++it) {
if((it->val==x.val)&&(it->a!=x.a)&&(it->a!=x.b)&&(it->b!=x.a)&&(it->b!=x.b))
s++;
}
return s;
}
inline void adauga(oita x)
{
v[x.val%206713].push_back(x);
}
inline void citire(int &n, int &s)
{
int i,m,b,l;
ifstream f("oite.in");
f>>n>>s;
f.get();
f.get(c,10000);
m=strlen(c)-1;
l=0;
for(i=0;i<=m;i++) {
b=0;
while((c[i]>='0')&&(c[i]<='9')) {
b=b*10+(c[i]-48);
i++;
}
l++;
a[l]=b;
}
f.close();
}
int main ()
{
int n,i,j,s,nr;
oita x;
ofstream g("oite.out");
citire(n,s);
sort(a+1,a+n+1);
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);
}
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;
}