Cod sursa(job #22386)

Utilizator anamaria1Ozorchevici Ana Maria anamaria1 Data 26 februarie 2007 12:57:45
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 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 c[15],l;
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]+1;t=c[i]/10;c[i]=c[i]%10;i++;}
if((i-1)>l) l=i-1;
}
int main()
{ifstream f("triplete.in");
ofstream g("triplete.out");
unsigned long i,j,k,p,n2,p2,var;
int t;
/*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;
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)) adun();//c++;
 if((a[mat[i][0]-1][p2]&j)&&(a[mat[i][1]-1][p2]&j)) adun();//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)) adun();//c++;
   if((a[mat[i][0]-1][j]&k)&&(a[mat[i][1]-1][j]&k)) adun();//c++;
  }
}
for(t=l;t>=0;t--) g<<c[t];
g<<'\n';
g.close();
return 0;
}