Cod sursa(job #21771)

Utilizator anamaria1Ozorchevici Ana Maria anamaria1 Data 24 februarie 2007 12:34:32
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream.h>
#define max(x,y) ((x)>(y) ? (x):(y))
#define dim1 4096
#define dim2 128
#define dim3 65537
unsigned long a[dim1][dim2],n,m;
int mat[dim3][2];
int main()
{ifstream f("triplete.in");
ofstream g("triplete.out");
unsigned long i,j,k,p,n2,p2,var;
//unsigned long c;
long long c;
f>>n>>m;
for(i=1;i<=m;i++)
 {f>>mat[i][0]>>mat[i][1];
  a[mat[i][0]-1][(mat[i][1]-1)/32]+=1<<((mat[i][1]-1)%32);
  a[mat[i][1]-1][(mat[i][0]-1)/32]+=1<<((mat[i][0]-1)%32);
 }
f.close();
n2=n/32;c=0;
for(i=1;i<=m;i++)
{p=max((mat[i][0]-1),(mat[i][1]-1));
 p2=(p+1)/32;p=1<<((p+1)%32);
 var=1;var=var<<31;
 for(j=p;j<var;j=j<<1)
   if((a[mat[i][0]-1][p2]&j)&&(a[mat[i][1]-1][p2]&j)) c++;
 if((a[mat[i][0]-1][p2]&j)&&(a[mat[i][1]-1][p2]&j)) c++;
 for(j=p2+1;j<=n2;j++)
  {var=1;var=var<<31;
   for(k=1;k<var;k=k<<1)
    if((a[mat[i][0]-1][j]&k)&&(a[mat[i][1]-1][j]&k)) c++;
   if((a[mat[i][0]-1][j]&k)&&(a[mat[i][1]-1][j]&k)) c++;
  }
}
g<<c<<'\n';
g.close();
return 0;
}