Cod sursa(job #70883)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 8 iulie 2007 12:25:55
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.2 kb
#include<stdio.h>
long int a[130][130][130],i,j,k,m,n,x[100001],y[100001],z[100001],sol,s[130],solp;
int semne();
long int card(long int ic);
int main()
{       FILE *f,*g;
	f=fopen("puteri.in","r");
	g=fopen("puteri.out","w");
	fscanf(f,"%ld",&n);
	for(i=1;i<=n;i++)
        fscanf(f,"%ld%ld%ld",&x[i],&y[i],&z[i]);
	semne();
	for(i=0;i<128;i++)
	if(s[i])
	{ solp=card(i);
	  sol=sol+s[i]*solp;
	}
	fprintf(g,"%ld\n",sol);
	fcloseall();
	return 0;
}
int semne()
{   s[2]=1;s[3]=1,s[5]=1;s[7]=1;
    s[11]=1;s[13]=1;s[17]=1;s[19]=1;
    s[23]=1;s[29]=1;s[31]=1;s[37]=1;
    s[41]=1;s[43]=1;s[47]=1;s[53]=1;
    s[59]=1;s[61]=1;s[67]=1;s[71]=1;
    s[73]=1;s[79]=1;s[83]=1;s[89]=1;
    s[97]=1;s[101]=1;s[103]=1;s[107]=1;
    s[109]=1;s[113]=1;s[127]=1;s[30]=1;
    s[42]=1;s[66]=1;s[78]=1;s[102]=1;
    s[114]=1;s[70]=1;s[110]=1;s[105]=1;
    s[6]=-1;s[10]=-1;s[14]=-1;s[22]=-1;
    s[26]=-1;s[34]=-1;s[38]=-1;s[46]=-1;
    s[58]=-1;s[62]=-1;s[74]=-1;s[82]=-1;
    s[86]=-1;s[94]=-1;s[106]=-1;s[118]=-1;
    s[122]=-1;s[15]=-1;s[21]=-1;s[33]=-1;
    s[39]=-1;s[51]=-1;s[57]=-1;s[69]=-1;
    s[87]=-1;s[93]=-1;s[111]=-1;s[123]=-1;
    s[35]=-1;s[55]=-1;s[65]=-1;s[85]=-1;
    s[95]=-1;s[115]=-1;s[77]=-1;s[91]=-1;
    s[119]=-1;
    return 0;
}
long int card(long int ic)
{
        long int i1,i2,i3,j1,j2,j3,ii,ret,aa;
	ret=0;
	for(i1=0;i1<ic-1;i1++)
	 for(i2=0;i2<ic-1;i2++)
	  for(i3=0;i3<ic-1;i3++)
	   a[i1][i2][i3]=0;
	for(ii=1;ii<=n;ii++)
	a[x[ii]%ic][y[ii]%ic][z[ii]%ic]++;
	for(i1=0;;i1++)
	{ j1=(ic-i1)%ic;
	  if(i1>j1)break;
	  if(i1<j1)
	  { for(i2=0;i2<ic;i2++)
	     for(i3=0;i3<ic;i3++)
	     if(a[i1][i2][i3]
	     { j2=(ic-i2)%ic;
	       j3=(ic-i3)%ic;
	       ret+=a[i1][i2][i3]*a[j1][j2][j3];
	     }
	  }
	  else
	   for(i2=0;;i2++)
	   {
		j2=(ic-i2)%ic;
		if(i2>j2) break;
		if(i2<j2)
		{ for(i3=0;i3<ic;i3++)
		  if(a[i1][i2][i3]
		  {j3=(ic-i3)%ic;
		   ret+=a[i1][i2][i3]*a[j1][j2][j3];
		  }
		}
		else
		 for(i3=0;;i3++)
		 if(a[i1][i2][i3]
		 { j3=(ic-i3)%ic;
		   if(i3>j3) break;
		   if(i3<j3)
		   ret+=a[i1][i2][i3]*a[j1][j2][j3];
		   else
		   {
			aa=a[i1][i2][i3];
			ret+=(aa*(aa-1))/2;
		   }
		 }
	   }
	}
	return ret;
}