Pagini recente » Cod sursa (job #2011231) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #193876) | Cod sursa (job #75879)
Cod sursa(job #75879)
#include <cstdio>
#include <algorithm>
using namespace std;
#define mp make_pair
#define x first
#define y second
#define Nmax 1024
int n, s;
int Lana[Nmax];
int m;
pair<int, int> v[Nmax*Nmax/2];
int ret;
void readdata()
{
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
scanf("%d %d", &n, &s);
for (int i = 0; i < n; ++i)
scanf("%d", &Lana[i]);
}
inline int cmp(const pair<int, int> &a, const pair<int, int> &b)
{ return Lana[a.x] + Lana[a.y] < Lana[b.x] + Lana[b.y]; }
void solve()
{
int i, j, k;
for (i = 0; i < n; ++i)
for (j = i+1; j < n; ++j)
v[m++] = mp(i, j);
sort(v, v+m, cmp);
return;
for (i = 0, j = m-1; i < m && j >= 0; ++i)
{
for (; j >= 0 && (Lana[v[i].x] + Lana[v[i].y] + Lana[v[j].x] + Lana[v[j].y] > s); --j);
for (k = j; k >= 0 && (Lana[v[i].x] + Lana[v[i].y] + Lana[v[k].x] + Lana[v[k].y] == s); --k)
if (v[i].x < v[k].x && v[i].y != v[k].x && v[i].y != v[k].y) ++ret;
}
printf("%d\n", ret/3);
}
int main()
{
readdata();
solve();
return 0;
}