Pagini recente » Cod sursa (job #901012) | Cod sursa (job #110587) | Cod sursa (job #1304177) | Cod sursa (job #170327) | Cod sursa (job #972102)
Cod sursa(job #972102)
# include <cstdio>
# include <vector>
# include <algorithm>
# define MAXN 1030
# define MOD 666013
# define pb push_back
using namespace std;
int x,y,s;
struct oi
{
int x,y,s;
};
oi oaie;
vector <oi> a[MOD];
vector <oi> :: iterator it;
int v[MAXN],V[10],l,n,i,j,nr,ind;
int o[MAXN][10];
bool verificare(int a, int b, int c, int d)
{
if(a==b || a==c || a==d || b==c || b==d || c==d) return false;
return true;
}
bool verificare2(int a, int b, int c, int d, int nr)
{
int i,val;
V[0]=a;
V[1]=b;
V[2]=c;
V[3]=d;
sort(V,V+4);
if(nr==0) return true;
val=0;
for(i=1; i<=nr; ++i)
if(o[i][0]==V[0] && o[i][1]==V[1] && o[i][2]==V[2] && o[i][3]==V[3]) val++;
if(val>0) return false;
return true;
}
void solve()
{
int i,j;
for(i=1; i<n; ++i)
for(j=i+1; j<=n; ++j)
{
oaie.x=i;
oaie.y=j;
oaie.s=v[i]+v[j];
ind=(l-oaie.s)%MOD;
for(it=a[ind].begin(); it!=a[ind].end(); ++it)
if((*it).s==l-oaie.s && verificare(i,j,(*it).x,(*it).y) && verificare2(i,j,(*it).x,(*it).y,nr))
{
nr++;
o[nr][0]=i;
o[nr][1]=j;
o[nr][2]=(*it).x;
o[nr][3]=(*it).y;
sort(o[nr],o[nr]+4);
}
a[oaie.s%MOD].pb(oaie);
}
}
int main()
{
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
scanf("%d %d\n", &n, &l);
for(i=1; i<=n; ++i) scanf("%d ", &v[i]);
solve();
printf("%d\n", nr);
}