Cod sursa(job #2315699)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 10 ianuarie 2019 14:13:39
Problema Indep Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
typedef long long ll;
ll dp[2][1001][101],v[501],one[5],Max;
const ll base = 1e9;
void add(ll A[], ll B[])
{
    ll i, t = 0;
    for (i = 1; i<=A[0] || i<=B[0] || t; i++, t/=base)
    {
        t+=A[i]+B[i];
        A[i] = t%base;
    }
    A[0] = i-1;
}
ll nrcif(ll x)
{
    ll c = 1;
    while (x>9)
    {
        x/=10;
        c++;
    }
    return c;
}
int main()
{
    ll n;
    in >> n;
    for (ll i = 1; i<=n; i++)
    {
        in >> v[i];
        Max = max(Max,v[i]);
    }
    ll l = 0;
    one[++one[0]] = 1;
    add(dp[1][v[1]],one);
    for (ll i = 2; i<=n; i++, l = 1-l)
    {
        memset(dp[l],0,sizeof(dp[l]));
        for (ll j = 1; j<=Max; j++)
        {
            add(dp[l][__gcd(v[i],j)],dp[1-l][j]);
            add(dp[l][j],dp[1-l][j]);
        }
        add(dp[l][v[i]],one);
    }
    l = 1-l;
    ll sz = dp[l][1][0];
    out << dp[l][1][sz];
    for (ll i = sz-1; i>=1; i--)
    {
        ll x = dp[l][1][i], cnt = nrcif(x);
        for (ll j = 1; j<=9-cnt; j++)
            out << "0";
        out << x;
    }
}