Cod sursa(job #1790178)

Utilizator borcanirobertBorcani Robert borcanirobert Data 27 octombrie 2016 21:06:13
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <fstream>
#include <cstring>
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;
int ma[MAXN];
int mb[MAXN];
int mc[MAXN];

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;
    int op1, op2, op3;

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

        if ( x > 1 ) continue;

      //  cout << d << ' ' << sgn; cin.get();

        for ( i = 1; i <= N; i++ )
        {
       //     ma[i] = a[i] % d, mb[i] = b[i] % d, mc[i] = c[i] % d;
            n[ma[i]][mb[i]][mc[i]]++;
        }

        for ( i = 1; i <= N; i++ )
        {
            n[ma[i]][mb[i]][mc[i]]--;

            p1 = ( d - ma[i] );
            p2 = ( d - mb[i] );
            p3 = ( d - mc[i] );

            if ( p1 == d ) p1 = 0;
            if ( p2 == d ) p2 = 0;
            if ( p3 == d ) p3 = 0;

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

      /*  for ( p1 = 0; p1 < d; p1++ )
            for ( p2 = 0; p2 < d; p2++ )
                for ( p3 = 0; p3 < d; p3++ )
                    if ( n[p1][p2][p3] )
                    {
                        op1 = ( d - p1 ) % d;
                        op2 = ( d - p2 ) % d;
                        op3 = ( d - p3 ) % d;

                        if ( !( p1 == op1 && p2 == op2 && p3 == op3 ) )
                            rez += sgn * n[p1][p2][p3] * n[op1][op2][op3];
                        else
                            rez += sgn * n[p1][p2][p3] * ( n[op1][op2][op3] - 1 );
                    }

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

  //  rez /= 2;
}