Cod sursa(job #3245270)

Utilizator vlad7654vladimir manescu vlad7654 Data 28 septembrie 2024 10:41:37
Problema Indep Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int NMAX=500;
int n;
int v[NMAX+5];
int dp[2*NMAX+5][2*NMAX+5];

void adunare(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(){
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>v[i];
    }
    dp[0][0]=dp[0][1]=1;
    for(int i=1;i<=n;i++){
        for(int j = 1; j<=1000; j++){
            int gcd = __gcd(j, v[i]);
            adunare(gcd, j);
        }
        adunare(v[i], 0);
    }
    if(dp[1][0] == 0){
        fout<<0;
    }else{
        for(int i=dp[1][0];i>=1;i--){
            fout<<dp[1][i];
        }
    }
}