Cod sursa(job #2643708)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 20 august 2020 23:48:24
Problema Patrate2 Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <cstdio>
#include <cstring>
using namespace std;
class HugeN
{
private:
    int a[1000];
public:
    HugeN(int x = 0)
    {
        memset(a , 0 , sizeof(a));
        a[0] = 1;
        a[1] = x;
    }
    HugeN operator*(const HugeN& b)
    {
        int i , j , tr , aux;
        HugeN c;
        c.a[0] = a[0] + b.a[0] - 1;
        for(i = 1 ; i <= a[0] ; i ++)
            for(j = 1 ; j <= b.a[0] ; j ++)
                c.a[i + j - 1] += a[i] * b.a[j];
        tr = 0;
        for(i = 1 ; i <= c.a[0] ; i ++)
        {
            aux = c.a[i] + tr;
            c.a[i] = aux % 10;
            tr = aux / 10;
        }
        while(tr)
        {
            c.a[++ c.a[0]] = tr % 10;
            tr /= 10;
        }
        return c;
    }
    HugeN operator*(const int& k)
    {
        int i , tr , aux;
        HugeN c;
        c.a[0] = a[0];
        tr = 0;
        for(i = 1 ; i <= c.a[0] ; i ++)
        {
            aux = tr + k * a[i];
            c.a[i] = aux % 10;
            tr = aux / 10;
        }
        while(tr)
        {
            c.a[++ c.a[0]] = tr % 10;
            tr /= 10;
        }
        return c;
    }
    void get_number()
    {
        for(int i = a[0] ; i >= 1 ; i --)
            printf("%d" , a[i]);
    }
};
HugeN fast_pow(HugeN a , int p)
{
    HugeN aa(1);
    for( ; p ; p = (p >> 1))
    {
        if(p & 1)
            aa = aa * a;
        a = a * a;
    }
    return aa;
}
int main()
{
    freopen("patrate2.in" , "r" , stdin);
    freopen("patrate2.out" , "w" , stdout);
    int n , i;
    HugeN sol(1) , aux(2);
    scanf("%d" , &n);
    for(i = 1 ; i <= n ; i ++)
        sol = sol * i;
    sol = sol * fast_pow(aux , n * n);
    sol.get_number();
    return 0;
}