Cod sursa(job #2413497)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 23 aprilie 2019 14:22:41
Problema Puteri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <bits/stdc++.h>

#define VARENA 0
#define INFOARENA 1

/*----------OPEN_FILES---------------*/

const char *FILEIN = "puteri.in" ;
const char *FILEOUT = "puteri.out" ;

#define FILES INFOARENA

#if FILES == 0
        FILE *in = fopen(FILEIN, "r"), *out = fopen(FILEOUT, "w") ;
#else
        std::ifstream in (FILEIN) ;
        std::ofstream out (FILEOUT) ;
#endif // FILE


/*--------------MAXS--------------*/

const int MV = 1 << 17 ;
const int MC = 128 ;

/*-----------STARTER_PACK-------------*/

int n, a[MV], b[MV], c[MV], bit[MC + 20], l[MC + 20], fr[MC / 2 + 20][MC / 2 + 20][MC / 2 + 20] ;
bool ciur[MC + 20] ;

long long sol ;

/*--------MOD----------*/

long long solve(int mod) {
        int i, ra, rb, rc ;
        long long sol = 0 ;
        memset(fr, 0, sizeof fr) ;
        for (i = 0 ; i <= 128 ; ++ i) {
                l[i] = i % mod ;
        }
        for (i = 0 ; i < n ; ++i) {
                ra = l[mod - l[a[i]]] ;
                rb = l[mod - l[b[i]]] ;
                rc = l[mod - l[c[i]]] ;
                if (ra <= 64 && rb <= 64 && rc <= 64) {
                        sol += fr[ra][rb][rc] ;
                }
                fr[l[a[i]]][l[b[i]]][l[c[i]]] ++ ;
        }
        return sol ;
}

/*--------PROGRAM----------*/

int main() {
        in >> n ;
        int i, j ;
        for (i = 0 ; i < n ; ++ i)
                in >> a[i] >> b[i] >> c[i] ;
        for (i = 2 ; i <= 128 ; ++ i)
                bit[i] = 1 ;
        for (i = 2 ; i <= 128 ; ++ i) {
                if (!ciur[i]) {
                        for (j = i ; j <= 128 ; j += i) {
                                bit[j] *= -1 ;
                                ciur[j] = 1 ;
                        }
                        for (j = i * i ; j <= 128 ; j += i * i)  {
                                bit[j] = 0 ;
                        }
                }
                if (bit[i] != 0)
                        sol -= bit[i] * solve(i) ;
        }
        out << sol ;
        return 0 ;
}