Cod sursa(job #2631706)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 30 iunie 2020 17:25:47
Problema Indep Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 10007
#define INF 2100000000

using namespace std;
const int NMAX = 505;

int N;
int v[NMAX];
int dp[2 * NMAX][2 * NMAX];

inline int gcd(int x, int y){
    if(!y)
        return x;
    return gcd(y, x % y);
}

inline void sum(int a, int b){
    for(int i = 1; i <= dp[b][0]; i++)
        dp[a][i] += dp[b][i];
    dp[a][0] = max(dp[a][0], dp[b][0]);
    for(int i = 1; i <= dp[a][0] + 5; i++){
        if(dp[a][i]) dp[a][0] = i;
        dp[a][i + 1] += dp[a][i] / 10;
        dp[a][i] %= 10;
    }
}

int main(){

    freopen("indep.in", "r", stdin);
    freopen("indep.out", "w", stdout);

    scanf("%d", &N);
    for(int i = 1; i <= N; ++i)
        scanf("%d", &v[i]);
    dp[0][0] = dp[0][1] = 1;
    dp[1][0] = 1;
    for(int i = 1; i <= N; ++i){
        for(int j = 1; j <= 1000; ++j){
            if(!dp[j][0]) continue;
            sum(gcd(v[i], j), j);
        }
        sum(v[i], 0);
    }
    for(int i = dp[1][0]; i > 0; --i)
        printf("%d", dp[1][i]);

    return 0;
}