Pagini recente » Cod sursa (job #2055010) | Rating Stefan Gabriel (S.Gabriel) | Cod sursa (job #1333689) | Cod sursa (job #696005) | Cod sursa (job #1971869)
#include <stdint.h>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#define nmax 1025
#define mod 1048583
using namespace std;
fstream f1("oite.in", ios::in);
fstream f2("oite.out", ios::out);
int16_t n;
int32_t suma, a[nmax];
int64_t nrsol;
struct dfgh
{
int32_t s;
int16_t in1, in2; ///cu in1<in2
}v[mod];
void citire()
{
int16_t i;
f1>>n>>suma;
for(i=1; i<=n; i++)
f1>>a[i];
}
int32_t ha(int32_t sum)
{
int32_t in=0, j;
do
{
j=(sum%mod + (in*( sum%(mod-1) )))%mod;
if(!v[j].s) return j;
in++;
}while(in< mod);
return -1;
}
void hashh()
{
int16_t i, j;
int32_t in;
for(i=1; i<=n; i++)
for(j=i+1; j<=n; j++)
{
in= ha(a[i]+a[j]);
if(in!=-1)
{
v[in].s= a[i]+a[j];
v[in].in1=i;
v[in].in2=j;
}
}
}
void cauta(int32_t x, int32_t sum)
{
int32_t in=0, j;
do
{
j=(sum%mod + (in*( sum%(mod-1) )))%mod;
if((v[j].s== sum)&&(v[x].in2< v[j].in1)) nrsol++;
in++;
}while((in< mod)&&(v[j].s));
}
void sol()
{
int32_t i, val;
for(i=0; i<mod; i++)
if(v[i].s)
{
val=suma-v[i].s;
///valoare de cautat
cauta(i, val);
}
f2<<nrsol;
}
int main()
{
citire();
hashh();
sol();
return 0;
}