Cod sursa(job #2315727)

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

using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int dp[2][1005][105],v[505],one[5];
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];
    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<=1000; j++)
        {
            int d = __gcd(v[i],j);
            add(dp[l][d],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 j = 1; j<=9-cnt; j++)
            out << "0";
        out << x;
    }
}