Cod sursa(job #21490)

Utilizator anamaria1Ozorchevici Ana Maria anamaria1 Data 23 februarie 2007 18:47:50
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
//#include<iostream.h>
#include <fstream.h>
#define max(x,y) ((x)>(y) ? (x):(y))
#define dim1 4096
#define dim2 5128
#define dim3 65537
unsigned long a[dim1][dim2],n,m;
int mat[dim3][2];//,lung,c[12];
/*void adun()
{int i,t;
c[0]=c[0]+1;t=c[0]/10;c[0]=c[0]%10;
i=1;
while(t) {c[i]=c[i]+t;t=c[i]/10;c[i]=c[i]%10;i++;}
if((i-1)>lung) lung=i-1;
} */
int main()
{ifstream f("triplete.in");
ofstream g("triplete.out");
unsigned long i,j,k,p,n2,c,p2,var;
//int cont;
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();
/*for(i=0;i<=n;i++)
 for(j=0;j<=(n/32);j++) cout<<a[i][j]<<" ";*/
n2=n/32;c=0;
/*for(i=0;i<12;i++) c[i]=0;
lung=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++;
  }
}
//for(cont=lung;cont>=0;cont--) g<<c[cont];
//g<<'\n';
g<<c<<'\n';
g.close();
return 0;
}