Cod sursa(job #1790133)

Utilizator borcanirobertBorcani Robert borcanirobert Data 27 octombrie 2016 20:37:06
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
using namespace std;

ifstream fin("puteri.in");
ofstream fout("puteri.out");

const int MAXN = 100005;
const int MAXABC = 125;
int N, a[MAXN], b[MAXN], c[MAXN];
int n[MAXABC][MAXABC][MAXABC];
int rez;

void Read();
void Solve();

int main()
{
    Read();
    Solve();

    fout << rez;

    fin.close();
    fout.close();
    return 0;
}

void Read()
{
    int i;

    fin >> N;
    for ( i = 1; i <= N; i++ )
    {
        fin >> a[i] >> b[i] >> c[i];
    }
}

void Solve()
{
    int i, j, p1, p2, p3, d;
    int sgn, x;

    for ( d = 2; d <= 124; d++ )
    {
        x = d; sgn = -1;
        for ( i = 2; x > 1; i++ )
        {
            if ( x % i == 0 )
            {
                while ( x % i == 0 ) x /= i;
                sgn = (sgn == -1 ? 1 : -1);
            }
        }

        for ( i = 1; i <= N; i++ )
            n[a[i] % d][b[i] % d][c[i] % d]++;

        for ( i = 1; i <= N; i++ )
        {
            n[a[i] % d][b[i] % d][c[i] % d]--;

            p1 = ( d - a[i] ) % d;
            p2 = ( d - b[i] ) % d;
            p3 = ( d - c[i] ) % d;

        //    if ( !( p1 == a[i] && p2 == b[i] && p3 == c[i] ) )
            rez += sgn*( n[p1][p2][p3] );
          //  else
         //       rez += sgn*( n[p1][p2][p3] );
        }
    }
}