Pagini recente » Cod sursa (job #2838178) | Cod sursa (job #3252788) | Cod sursa (job #2544173) | Cod sursa (job #2717053) | Cod sursa (job #1199527)
#include <stdio.h>
#define MAXC 1024
#define MOD 355099
int v[ MAXC + 1 ];
int hash[ MAXC * MAXC + 1 ], unu[ MAXC * MAXC + 1 ], doi[ MAXC * MAXC + 1 ], ult[ MOD ], dr = 1;
void add( int a, int b ){
int x = ( v[ a ] + v[ b ] ) % MOD;
hash[ dr ] = ult[ x ];
ult[ x ] = dr;
unu[ dr ] = a;
doi[ dr ] = b;
dr++;
return ;
}
long long exista( int l, int a, int b ){
int poz = ult[ l - ( ( v[ a ] + v[ b ] ) % MOD ) ];
long long rez = 0;
while ( poz > 0 ){
if ( unu[ poz ] < a && doi[ poz ] < b && a < doi[ poz ] ) rez++;
poz = hash[ poz ];
}
return rez;
}
int main()
{
FILE *in = fopen ( "oite.in", "r" );
int c, l;
fscanf ( in, "%d%d", &c, &l );
int i, j;
for ( i = 1; i <= c; i++ ){
fscanf ( in, "%d", &v[ i ] );
}
fclose ( in );
long long rez = 0;
for ( i = 1; i <= c; i++ ){
for ( j = i + 1; j <= c; j++ ){
if ( v[ i ] + v[ j ] <= l ){
rez += exista ( l, i, j );
}
add( i, j );
}
}
FILE *out = fopen ( "oite.out", "w" );
fprintf ( out, "%lld", rez );
fclose ( out );
return 0;
}