Pagini recente » Cod sursa (job #2844989) | Cod sursa (job #2564486) | Cod sursa (job #2295949) | Cod sursa (job #2299252) | Cod sursa (job #51037)
Cod sursa(job #51037)
#include <stdio.h>
#define MAX 1030
int C, L, a[MAX];
int wool, m[MAX*MAX], m2[MAX*MAX];
int n, pivot, aux;
int o1, o2, o3, o4, found, pos, rez;
void quickSort(int st, int dr);
int main()
{
FILE *fin = fopen("oite.in", "r");
fscanf(fin, "%d%d", &C, &L);
for (int i = 1; i <= C; ++i)
fscanf(fin, "%d", &a[i]);
fclose(fin);
for (int i = 1; i <= C; ++i)
for (int j = i+1; j <= C; ++j)
{
wool = a[i] + a[j];
m[n] = wool;
m2[n] = i*1030 + j;
n++;
}
int st, dr, mijl;
quickSort(0, n-1);
for (int i = 0; i < n; ++i)
{
if (m[i] > L / 2) break;
st = i;
dr = n-1;
found = 0;
while (st <= dr)
{
mijl = (st + dr) >> 1;
if (m[mijl] == (L - m[i]))
{
found = mijl;
break;
}
else
if (m[mijl] < (L - m[i]))
st = mijl + 1;
else
dr = mijl - 1;
}
if (found)
{
pos = found;
while (m[pos] == L - m[i])
{
o1 = m2[i] / 1030;
o2 = m2[i] % 1030;
o3 = m2[mijl] / 1030;
o4 = m2[mijl] % 1030;
if (!(o1 == o2 || o1 == o3 || o1 == o4 || o2 == o3 || o2 == o4 || o3 == o4))
rez++;
// fprintf(fout, "%d %d %d %d\n", o1, o2, o3, o4);
pos++;
}
pos = found-1;
while (m[pos] == L - m[i])
{
o1 = m2[i] / 1030;
o2 = m2[i] % 1030;
o3 = m2[mijl] / 1030;
o4 = m2[mijl] % 1030;
if (!(o1 == o2 || o1 == o3 || o1 == o4 || o2 == o3 || o2 == o4 || o3 == o4))
rez++;
//fprintf(fout, "%d %d %d %d\n", o1, o2, o3, o4);
pos--;
}
}
}
FILE *fout = fopen("oite.out", "w");
fprintf(fout, "%d\n", rez / 3);
fclose(fout);
return 0;
}
void quickSort(int st, int dr)
{
int i = st - 1, j = dr + 1;
pivot = m[st];
do
{
do { i++; } while (pivot > m[i]);
do { j--; } while (pivot < m[j]);
if (i <= j)
{
aux = m[i];
m[i] = m[j];
m[j] = aux;
aux = m2[i];
m2[i] = m2[j];
m2[j] = aux;
}
} while (i <= j);
if (i < dr) quickSort(i, dr);
if (j > st) quickSort(st, j);
}