Cod sursa(job #827745)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 2 decembrie 2012 16:26:59
Problema Patrate2 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
#include<fstream>


using namespace std;

#define MAXF 3500

typedef int Huge[ MAXF ];

int n, i, t;
Huge a, b, res;

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

inline void MultHuge(Huge a, Huge b, Huge c)
{
    int i, j, T;

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

    for(i = 1; i <= c[0]; ++i)
        c[i] += T, T = c[i] / 10, c[i] %= 10;

    while(T)
        ++c[0], c[ c[0] ] = T % 10, T /= 10;
}

int main()
{
    ifstream f("patrate2.in");

    f >> n;

    f.close();

    a[0] = a[1] = b[0] = b[1] = 1;
    t = n * n;
    t /= 3;
    for(i = 1; i <= t; ++i)
        Mult(a, 8);
    t %= 3;
    for(i = 1; i <= t; ++i)
        Mult(a, 2);

    for(i = 2; i <= n; ++i)
        Mult(b, i);
    MultHuge(a, b, res);

    FILE *g = fopen("patrate2.out", "w");

    for(i = res[0]; i; --i)
        fprintf(g, "%d", res[i]);
    fprintf(g, "\n");

    fclose(g);

    return 0;
}