Cod sursa(job #25138)

Utilizator undogSavu Victor Gabriel undog Data 4 martie 2007 11:01:18
Problema Puteri Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.29 kb
#include<stdio.h>
#include<math.h>

int main(){

 int mat[32000],mat1[32000],mat2[32000];
 long ct=0;
 freopen("puteri.out","w+",stdout);
 freopen("puteri.in","rt",stdin);
 long n,i,j,k,po,q;

 scanf("%ld",&n);

 for(i=0;i<n;i++)
  scanf("%d%d%d",&mat[i],&mat1[i],&mat2[i]);

 for(i=0;i<n-1;i++)
  for(j=i+1;j<n;j++){

   po=mat[i]+mat[j];
   q=0;
   if(!po){
   po=mat1[i]+mat1[j];
   q=1;
   }
   if(!po){
   po=mat2[i]+mat2[j];
   q=2;
   }
   for(k=0;po%2==0&&po>2;po/=2,k++);

   if(!k){
    if(po!=1)
     if((mat[i]+mat[j])==po||!(mat[i]+mat[j]))
      if((mat1[i]+mat1[j])==po||!(mat1[i]+mat1[j]))
       if((mat2[i]+mat2[j])==po||!(mat2[i]+mat2[j]))
	ct++;}
   else{
    if(q==0)
     if((mat[i]+mat[j])==po*pow(2,k)||!(mat[i]+mat[j]))
      if((mat1[i]+mat1[j])==po||!(mat1[i]+mat1[j]))
       if((mat2[i]+mat2[j])==po||!(mat2[i]+mat2[j]))
	ct++;
    if(q==1)
     if((mat[i]+mat[j])==po||!(mat[i]+mat[j]))
      if((mat1[i]+mat1[j])==po*pow(2,k)||!(mat1[i]+mat1[j]))
       if((mat2[i]+mat2[j])==po||!(mat2[i]+mat2[j]))
	ct++;
    if(q==2)
     if((mat[i]+mat[j])==po||!(mat[i]+mat[j]))
      if((mat1[i]+mat1[j])==po||!(mat1[i]+mat1[j]))
       if((mat2[i]+mat2[j])==po*pow(2,k)||!(mat2[i]+mat2[j]))
	ct++;
   }
  }
 printf("%ld",ct);

 return 1;
}