Cod sursa(job #2315678)

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

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