Cod sursa(job #3140809)

Utilizator alex210046Bratu Alexandru alex210046 Data 9 iulie 2023 23:47:36
Problema Dirichlet Scor 8
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream f("dirichlet.in");
ofstream g("dirichlet.out");
int C[200001];
void impartire(int x[], int n) {
    int i,r=0;
    for(i=x[0];i>0;i--)
    {
        r=10*r+x[i];
        x[i]=r/n;
        r%=n;
    }
    for(;x[x[0]]==0 && x[0]>1;)
        x[0]--;
}

void inmultire(int A[], int B) {
    int T = 0;
    for(int i = 1; i <= A[0]; i++) {
        T += A[i] * B;
        A[i] = T % 10;
        T /= 10;
    }
    while (T > 0) {
        A[++A[0]] = T % 10;
        T /= 10;
    }
}

void afisare(int A[]) {
    for(int i = A[0]; i > 0; i--)
        g << A[i];
}

void comb(int n, int k) {
    C[0] = 1; C[1] = 1;
    if(n - k < k)
        k = n - k;
    for(int i = 1; i <= k; i++) {
        inmultire(C, n - i + 1);
        impartire(C, i);
    }
}

int main() {
    int n; f >> n;
    comb(2 * n, n);
    impartire(C, n + 1);
    afisare(C);

    return 0;
}