Cod sursa(job #25149)

Utilizator judy_kCristina Petrovici judy_k Data 4 martie 2007 11:05:21
Problema Puteri Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 9-a si gimnaziu Marime 2.5 kb
#include <stdio.h>

int n,i,j,k,l,a[70][70][70],b[70][70],d[70][70],m,s,p,q,r;

int main()
{
	freopen("puteri.in","r",stdin);
    freopen("puteri.out","w",stdout);
    scanf("%d",&n);

    for (i=0;i<=64;++i)
    {
    	b[i][0]=0;
        b[i][65]=0;
        d[i][65]=0;
    }
    for (i=1;i<=64;++i) b[0][i]=i;
    b[0][65]=64;
    b[1][65]=0;

    for (i=2;i<=64;++i)
    {
        for (j=2;j<=i/2;++j)
        {
         	if (i%j==0)
            {
             	b[i][65]++;
                b[i][b[i][65]]=j;
            }
        }
        b[i][65]++;
        b[i][b[i][65]]=i;
        j=i*2;
        while (j<=64)
        {
         	d[i][65]++;
            d[i][d[i][65]]=j;
            j+=i;
        }

    }

    for (i=0;i<=64;++i)
    	for (j=0;j<=64;++j)
        	for (k=0;k<=64;++k)
            	a[i][j][k]=0;

    s=0;
    for (r=1;r<=n;++r)
    {
        scanf("%d %d %d",&i,&j,&k);
        for (l=0;l<=64;++l)
        {
            if (l-i>=0)
            {
                for (p=0;p<=b[l][65];++p)
                {
                    if (b[l][p]-j>=0)
                    {
                     	for (q=0;q<=b[l][65];++q)
                        {
                         	if (b[l][q]-k>=0)
                            {
                               	s+=a[l-i][b[l][p]-j][b[l][q]-k];
                            }
                        }
                        for (q=1;q<=d[l][65];++q)
                        {
                            if (d[l][q]-k>=0)
                            {
                               	s+=a[l-i][b[l][p]-j][d[l][q]-k];
                            }
        				}
                    }
                }
                for (p=1;p<=d[l][65];++p)
                {
                    if (d[l][p]-j>=0)
                    {
                     	for (q=0;q<=b[l][65];++q)
                        {
                         	if (b[l][q]-k>=0)
                            {
                               	s+=a[l-i][d[l][p]-j][b[l][q]-k];
                            }
                        }
                        for (q=1;q<=d[l][65];++q)
                        {
                            if (d[l][q]-k>=0)
                            {
                               	s+=a[l-i][d[l][p]-j][d[l][q]-k];
                            }
        				}
                    }
                }

            }

        }
        a[i][j][k]++;
    }

    printf("%d\n",s);
    return 0;

}