Pagini recente » Cod sursa (job #3000753) | Cod sursa (job #2722954) | Cod sursa (job #3125882) | Cod sursa (job #1863063) | Cod sursa (job #56229)
Cod sursa(job #56229)
#include <stdio.h>
unsigned long int v[1025] , sum[600000] ;
long long sol ;
struct cn
{
long int x , y ;
}conf[600000] ;
long int cmp(long int p , long int r)
{
unsigned long int x , i , j , tmp;
struct cn tmcn ;
x = sum[p] ;
i = p - 1 ;
j = r + 1 ;
while(5 > 0)
{
do
{
i++ ;
}while(sum[i] < x) ;
do
{
j-- ;
}while(sum[j] > x) ;
if(i >= j) return j ;
tmp = sum[i] ;
sum[i] = sum[j] ;
sum[j] = tmp ;
tmcn = conf[i] ;
conf[i] = conf[j] ;
conf[j] = tmcn ;
}
}
void qsort(long int p , long int r)
{
if(p < r)
{
long int q ;
q = cmp(p , r) ;
qsort(p , q) ;
qsort(q+1 , r) ;
}
}
int main()
{
unsigned long int i , j , k = 1 , l , c , pozi , pozj , m , n ;
FILE *in , *out ;
in = fopen("oite.in" , "rt") ;
out = fopen("oite.out" , "wt") ;
fscanf(in, "%ld %ld" , &c , &l) ;
for(i = 1 ; i <= c ; i++) fscanf(in , "%ld" , &v[i]) ;
for(i = 1 ; i <= c - 1 ; i++) for(j = i + 1 ; j <= c ; j++)
{
sum[k] = v[i] + v[j] ;
conf[k].x = i ;
conf[k].y = j ;
k++ ;
}
qsort(1 , k - 1) ;
i = 1 ;
j = k - 1 ;
while(i < j)
{
while(sum[j] > l - sum[i]) j-- ;
if(sum[i] + sum[j] < l)
{
pozi = i ;
while(sum[pozi] == sum[i]) i++ ;
}
else
{
pozi = i ;
pozj = j ;
while(sum[i] == sum[pozi]) i++ ;
while(sum[j] == sum[pozj]) j-- ;
for(m = pozi ; m < i ; m++) for(n = pozj ; n > j ; n--) if(conf[m].x != conf[n].x && conf[n].y != conf[m].y && conf[m].x != conf[n].y && conf[m].y != conf[n].x) sol++ ;
}
}
fprintf(out , "%lld" , sol) ;
fclose(in) ;
fclose(out) ;
return 0 ;
}