Cod sursa(job #3224624)

Utilizator unomMirel Costel unom Data 15 aprilie 2024 18:46:43
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>

#define int long long

using namespace std;

ifstream in("indep.in");
ofstream out("indep.out");
int n;
int v[505];
int dp[1005][1005];

void aduna(int x, int y)
{
    dp[x][0] = max(dp[x][0], dp[y][0]);

    int t = 0;
    for(int i = 1; i<=dp[x][0]; i++)
    {
        t += dp[x][i] + dp[y][i];
        dp[x][i] = t % 10;
        t /= 10;
    }

    while(t != 0)
    {
        dp[x][0]++;
        dp[x][dp[x][0]] = t % 10;
        t /= 10;
    }
}

signed main()
{
    in>>n;

    for(int i = 1; i<=n; i++)
    {
        in>>v[i];
    }

    dp[0][0] = dp[0][1] = 1;
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=1000; j++)
        {
            if(dp[j][0] == 0)
            {
                continue;
            }

            int gcd = __gcd(j, v[i]);

            //dp[gcd] += dp[j];
            aduna(gcd, j);
        }

        //dp[v[i]] += dp[0];
        aduna(v[i], 0);
    }

    if(dp[1][0] == 0)
    {
        out<<0;
    }
    else
    {
        for(int i = dp[1][0]; i>=1; i--)
        {
            out<<dp[1][i];
        }
    }

    return 0;
}