Cod sursa(job #721675)

Utilizator 5t3fristea stefan 5t3f Data 23 martie 2012 23:16:51
Problema Puteri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb

#include<stdio.h>

#define P 128

#define N 100002

long n,i,x[N],y[N],z[N],sol,s[P],k,a[P][P][P],op[P],r1,r2,r3,q1,q2,q3,val;

void readd(),solve(),semne();

int main()

{       readd();

solve();

return 0;

}

void readd()

{

freopen("puteri.in","r",stdin);

freopen("puteri.out","w",stdout);

scanf("%ld",&n);

for(i=1;i<=n;i++)scanf("%ld%ld%ld",&x[i],&y[i],&z[i]);

}

void solve()

{ semne();

for(k=2;k<=127;k++)

{ if(!s[k])continue;

for(i=1;i<=n;i++)a[x[i]%k][y[i]%k][z[i]%k]++;

for(i=1;i<k;i++)op[i]=k-i;

for(r1=0;r1<k;r1++)

{ q1=op[r1];

if(q1<r1)break;

for(r2=0;r2<k;r2++)

{ q2=op[r2];

for(r3=0;r3<k;r3++)

{ q3=op[r3];

if(a[r1][r2][r3])

{ if(a[q1][q2][q3])

{ if(q1==r1&&q2==r2&&q3==r3)

{ val+=a[r1][r2][r3]*(a[r1][r2][r3]-1)/2;

a[r1][r2][r3]=0;

}

else

{ val+=a[r1][r2][r3]*a[q1][q2][q3];

a[r1][r2][r3]=0;

a[q1][q2][q3]=0;

}

}

else

a[r1][r2][r3]=0;

}

else

a[q1][q2][q3]=0;

}

}

}

sol+=s[k]*val;

val=0;

}

printf("%ld\n",sol);

}

void semne()

{s[6]=-1;s[10]=-1;s[14]=-1;s[15]=-1;s[21]=-1;s[22]=-1;s[26]=-1;s[33]=-1;

s[34]=-1;s[35]=-1;s[38]=-1;s[39]=-1;s[46]=-1;s[51]=-1;s[55]=-1;s[57]=-1;

s[58]=-1;s[62]=-1;s[65]=-1;s[69]=-1;s[74]=-1;s[77]=-1;s[82]=-1;s[85]=-1;

s[86]=-1;s[87]=-1;s[91]=-1;s[93]=-1;s[94]=-1;s[95]=-1;s[106]=-1;s[111]=-1;

s[115]=-1;s[118]=-1;s[119]=-1;s[122]=-1;s[123]=-1;

s[30]=1;s[42]=1;s[66]=1;s[70]=1;s[78]=1;s[102]=1;s[105]=1;s[110]=1;s[114]=1;

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;

}