Cod sursa(job #45508)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 1 aprilie 2007 16:51:34
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
using namespace std;


int z[32],t;
int a[32]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97,101,103,107,109,113,127};
int b[129][129][129],i,j,k,u,v,w;
long N,X,r,Y[32];

fstream fin,fout;

void sub(int z[32],int k,int p)
{
if (p<128)
	{
	if ((k-1)%2==1)
		X=X+Y[p];
		else X=X-Y[p];
	for (int i=z[k-1]+1;i<32;i++)
		{
		z[k]=i;
		sub(z,k+1,p*a[i]);
		}
	}
}

int main(void)
{
fin.open("puteri.in",ios::in);
fout.open("puteri.out",ios::out);
for (j=0;j<32;j++)
{
t=a[j];
for (u=0;u<=128;u++)
	for (v=0;v<=128;v++)
		for (w=0;w<=128;w++)
			b[u][v][w]=0;
			
fin>>N;
for (i=1;i<=N;i++)
	{
	fin>>u>>v>>w;
	b[u%t][v%t][w%t]++;
	}
Y[j]=0;
for (u=0;u<=t;u++)
	for (v=0;v<=t;v++)
		for (w=0;w<=t;w++)
			if (((u+u)%t==0)&&((v+v)%t==0)&&((w+w)%t==0))
				Y[j]=Y[j]+b[u][v][w]*(b[u][v][w]-1)/2;
			  else	Y[j]=Y[j]+b[u][v][w]*b[t-u][t-v][t-w];
fin.close();
fin.open("puteri.in",ios::in);
}
				
X=0;
z[0]=0;
sub(z,1,1);
fout<<X<<endl;
fin.close();
fout.close();
return 0;
}