Cod sursa(job #2705227)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 12 februarie 2021 10:39:14
Problema Indep Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int n, el;
vector <int> pd[505][1005];

void aduna(vector <int> &a, vector <int> b) {
    if (a.size() < b.size())
        swap(a, b);
    int rest = 0;
    for (int i = 0; i < a.size() || rest > 0; ++i) {
        if (i >= a.size()) {
            a.push_back(rest % 10);
            rest /= 10;
            continue;
        }
        if (i < b.size())
            a[i] += b[i];
        a[i] += rest;
        rest = a[i] / 10;
        a[i] %= 10;
    }
    return;
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> el;
        for (int j = 1; j <= 1000; ++j) {
            int c = __gcd(el, j);
            if (pd[i][c].empty())
                pd[i][c] = pd[i - 1][c];
            aduna(pd[i][c], pd[i - 1][j]);
        }
        for (int j = 1; j <= 1000; ++j)
            if (pd[i][j].empty())
                pd[i][j] = pd[i - 1][j];
        aduna(pd[i][el], {1});
    }
    for (int i = pd[n][1].size() - 1; i >= 0; --i)
        fout << pd[n][1][i];
    return 0;
}