Cod sursa(job #45368)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 1 aprilie 2007 14:06:02
Problema Puteri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<fstream>
using namespace std;


int cmmdc(int a,int b)
{
int r;
while (b) { r=a%b; a=b; b=r; }
return a;
}


int a[65][65][65],b[129][129],i,j,k,u,v,w;
long N,X,r;

fstream fin,fout;

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