Cod sursa(job #415847)

Utilizator lalasCont de teste lalas Data 11 martie 2010 21:36:14
Problema Oite Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#define pb push_back
#define mp make_pair
#define f first
#define s second
const int mod = 1000003;
const int maxn = 1050;
using namespace std;
vector <pair<pair<int,int>,int> > hash[mod];
int i , j , n , l , v[maxn] , sol , cnt , k , sum;

int main()
{
	freopen("oite.in","r",stdin);
	freopen("oite.out","w",stdout);
	
	scanf("%d %d",&n,&l);
	for( i = 1 ; i <= n ; ++i )
		scanf("%d",&v[i]);
	
	
	for ( i = 1 ; i <= n ; ++i )
		for( j = i + 1 ; j <= n ; ++j )
			hash[(v[i] + v[j]) % mod].pb(mp(mp(i,j),v[i] + v[j]));
	
		
	for ( i = 1 ; i <= n ; ++i )
		for( j = i + 1 ; j <= n ; ++j ) {
			sum = (l - (v[i] + v[j])) % mod;
			if ( sum < 0 ) continue;
			cnt = 0;
			for( k = 0 ; k < hash[sum].size() ; ++k )
				if( hash[sum][k].s == sum  ) 
				if ( j <  hash[sum][k].f.f ) 
							//printf("%d %d %d %d\n",i,j,hash[sum][k].f.f,hash[sum][k].f.s) ,
					cnt++ ;
			sol += cnt;
		}

//printf("%d\n",sol);
printf("%d\n",sol );
return 0;
}