Cod sursa(job #29812)

Utilizator VmanDuta Vlad Vman Data 9 martie 2007 23:39:50
Problema Puteri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <stdio.h>
#include <string.h>
#define nmax 100000
#define smax 129

long n,i,j;
int a[nmax],b[nmax],c[nmax],t[130];
long r[smax][smax][smax];
long long nr;

void divizor(int d,int k)
{
long i,aa,bb,cc,aa1,bb1,cc1;
memset(r,0,sizeof(r));
for (i=0;i<n;++i)
    {
    aa=a[i]-(a[i]/d)*d;
    bb=b[i]-(b[i]/d)*d;
    cc=c[i]-(c[i]/d)*d;
    if (aa==0) aa1=0;
       else aa1=d-aa;
    if (bb==0) bb1=0;
       else bb1=d-bb;
    if (cc==0) cc1=0;
       else cc1=d-cc;
    nr+=r[aa1][bb1][cc1]*k;
    ++r[aa][bb][cc];
    }
}

int main()
{
    char s[40];
    int j;
    FILE *f;
    f=fopen("puteri.in","r");
    fscanf(f,"%ld\n",&n);
    for (i=0;i<n;++i)
        {
        fgets(s,40,f);
        j=0;
        while (s[j]!=' ')
              a[i]=a[i]*10+(s[j++]-'0');
        ++j;
        while (s[j]!=' ')
	      b[i]=b[i]*10+(s[j++]-'0');
	++j;
	while ((s[j]!='\n')&&(j!=strlen(s)))
              c[i]=c[i]*10+(s[j++]-'0');
        }
    fclose(f);
    t[1]=2;
    t[2]=3;
    t[3]=5;
    t[4]=7;
    t[5]=11;
    t[6]=13;
    t[7]=17;
    t[8]=19;
    t[9]=23;
    t[10]=29;
    t[11]=31;
    t[12]=37;
    t[13]=41;
    t[14]=43;
    t[15]=47;
    t[16]=53;
    t[17]=59;
    t[18]=61;
    t[19]=67;
    t[20]=71;
    t[21]=73;
    t[22]=79;
    t[23]=83;
    t[24]=89;
    t[25]=97;
    t[26]=101;
    t[27]=103;
    t[28]=107;
    t[29]=109;
    t[30]=113;
    t[31]=127;
    for (i=1;i<=31;++i)
        divizor(t[i],1);
    for (i=1;i<=31;++i)
	   for (j=i+1;j<=31;++j)
            if (t[i]*t[j]<=128)
               divizor(t[i]*t[j],-1);
               else break;
    divizor(30,1);
    divizor(42,1);
    divizor(66,1);
    divizor(78,1);
    divizor(102,1);
    divizor(114,1);
    divizor(70,1);
    divizor(110,1);
    divizor(105,1);

    freopen("puteri.out","w",stdout);
    printf("%lld",nr);
    fclose(stdout);
     return 0;
}