Cod sursa(job #3209346)

Utilizator AlexPlesescuAlexPlesescu AlexPlesescu Data 2 martie 2024 11:40:42
Problema Patrate2 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <bits/stdc++.h>

using namespace std;

int ocupat, n, ans[3000000], ans2[3000000], aux[3000000];

void inm(int a[], int x)
{
    int t = 0;
    for (int i = 1; i <= a[0]; i++)
    {
        a[i] = a[i] * x;
        t = a[i] / 10;
        a[i] %= 10;
    }
    while (t)
    {
        a[++a[0]] = t % 10;
        t /= 10;
    }
}

void inmultire_nrmare(int a[], int b[], int c[])
{
    c[0] = a[0] + b[0] - 1;
    for(int i = 1; i <= a[0] + b[0]; i++)
        c[i] = 0;

    for(int i = 1; i <= a[0]; i++)
    {
        for(int j = 1; j <= b[0]; j++)
        {
            c[i + j - 1] += a[i] * b[j];
        }
    }

    int t = 0;
    for(int i = 1; i <= c[0]; i++)
    {
        c[i] = c[i] + t;
        t = c[i] / 10;
        c[i] = c[i] % 10;
    }

    if(t != 0)
    {
        c[0]++;
        c[c[0]] = t;
    }
}

void atribuire_nrmare(int a[], int b[]) {
    //a <- b
    a[0] = b[0];
    for(int i = 1; i <= a[0]; i++) {
        a[i] = b[i];
    }
}

void afisare(int a[])
{
    for (int i=a[0]; i >= 1; i--)
        cout << a[i];
}

int main()
{
    freopen("patrate2.in", "r", stdin);
    freopen("patrate2.out", "w", stdout);
    cin >> n;
    if (n == 1)
    {
        cout << 2;
        return 0;
    }
    int cn = n;
    ans[0] = ans[1] = 1;
    while (cn)
    {
        inm(ans, 2);
        cn--;
    }
    cn = n - 1;
    ans2[0] = ans2[1] = 1;
    while (cn)
    {
        inm(ans2, 2);
        cn--;
    }
    for (int i = 1; i <= n; i++)
    {
        inm(ans, (n - i + 1));
        inmultire_nrmare(ans, ans2, aux);
        atribuire_nrmare(ans, aux);
    }
    afisare(ans);
    return 0;
}
/// Sa-mi bag toata cioaca in numere mari