Cod sursa(job #893003)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 26 februarie 2013 12:36:01
Problema Indep Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
# include <fstream>
# include <cstring>
# include <algorithm>
# include <vector>

# define baza 10

using namespace std;

ifstream f("indep.in");
ofstream g("indep.out");

long dp[ 1005 ][ 1005 ];
long unu[ 1005 ];

long A[ 505 ];
int N;

inline int cmmdc(int a, int b)
{
    if(!b)
        return a;
    return
         cmmdc(b, a % b);
}

void citire()
{
    int i;

    f >> N;
    for ( i = 1 ; i <= N ; i++ )
       f >> A[ i ];
}

void aduna( long A[], long B[] )
{
    int i, t = 0;
    for ( i = 1 ; i <= A[ 0 ] ||  i <= B[ 0 ] || t ; i++ )
    {
        A[ i ] = ( t += A[ i ] + B[ i ] ) % baza;
        t = t / baza;
    }
    A[ 0 ] = i - 1;
}

void rezolva()
{
    int i, j;
    int nr;

    unu[ 0 ] = unu[ 1 ] = 1;

    for ( i = 1  ; i <= N ; i++ )
    {
        for ( j = 1 ; j < 1000 ; j++ )
        {
            nr = cmmdc( A[ i ], j );
            aduna( dp[ nr ] , dp[ j ] );
        }
        //dp[ A[ i ] ] ++;
        aduna( dp[ A[ i ] ], unu );
    }
}

void afisare()
{
    int i, j;
   /* for ( i = 1 ; i <= 10 ; i++ )
    {
        for ( j = 1 ; j <= N ; j++ )
           g << dp[ i ][ j ] << " ";
        g << "\n";
    }
    */

    for ( i = dp[ 1 ][ 0 ] ; i >= 1 ; i-- )
        g << dp[ 1 ][ i ] <<"";
}

int main()
{
    citire();
    rezolva();
    afisare();
    return 0;
}