Cod sursa(job #2121565)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 3 februarie 2018 21:00:14
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("puteri.in");
ofstream fout("puteri.out");
int n;
bool d[66][66][66];
unsigned long long a[66][66][66], ct;
int cmmdc(int x, int y, int val)
{
    if(x==0 && y==0) return val;
    if(x==0 || y==0) return max(x,y);
    int r=x%y;
    while(r)
    {
        x=y;
        y=r;
        r=x%y;
    }
    return y;
}
void init()
{
    int i, j, p, kmd;
    for(i=0; i<=64; i++)
        for(j=0; j<=64; j++)
            for(p=0; p<=64; p++)
            {
                kmd=cmmdc(i,j,p);
                if(kmd>1)
                    if(p%kmd==0)
                        d[i][j][p]=1;
            }
}
void completeaza(int x, int y, int z)
{
    int i, j, p;
    for(i=0; i<=64-x; i++)
        for(j=0; j<=64-y; j++)
            for(p=0; p<=64-z; p++)
                if(d[x+i][y+j][z+p])
                    a[i][j][p]++;
}
int main()
{
    int i, x, y, z;
    fin>>n;
    init();
    for(i=1; i<=n; i++)
    {
        fin>>x>>y>>z;
        ct+=a[x][y][z];
        completeaza(x,y,z);
    }
    fout<<ct<<'\n';
    return 0;
}