Cod sursa(job #1850844)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 18 ianuarie 2017 22:59:32
Problema Nunta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
#define unc unsigned char

std::ifstream f("nunta.in");
std::ofstream g("nunta.out");

const int SIZE = 100;
/*int a[2][2], sol[2][2];
int c[2][2];*/
unc a1[SIZE], a2[SIZE];
int n;

/*void inmm(int k, int a[]) {
    int i, t = 0;
    for (i = 1; i <= a[0] || t; i++) {
        t += a[i]*k;
        cc[i] = t%10;
        t /= 10;
    }
    cc[0] = i-1;
    for (i = 1; i <= a[0]; i++)
        a[i] = c[i];s
}*/

void adun(unc a[], unc b[]) {
    int i, t = 0;
    unc cc[SIZE] = {0};
    for (i = 1; i <= std::max(a[0], b[0]) || t; i++) {
        t += a[i]+b[i];
        cc[i] = t%10;
        t /= 10;
    }
    cc[0] = i-1;
    for (i = 0; i <= a[0]; i++)
        a[i] = cc[i];
}
/*
void inm(int a[2][2], int b[2][2]) {
    int i, j, k;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 2; j++) {
            c[i][j] = 0;
            for (k = 0; k < 2; k++)
                c[i][j] += a[i][k]*b[k][j];
        }
    memcpy(a, c, sizeof(c));
}*/

int main() {
    f >> n;
    if (n < 3) { g << n; return 0;}
    a1[0] = a1[1] = 1;
    a2[0] = 1, a2[1] = 2;

    /*a[0][1] = a[1][0] = a[1][1] = 1;
    sol[0][0] = sol[1][1] = 1;
    n--;s
    while (n) {
        if (n%2)
            inm(sol, a);
        inm(a, a);
        n/=2;
    }
    inmm(sol[0][0], a1);
    inmm(sol[0][1], a2);*/
    while (n-- > 2) {
        adun(a1, a2);
        std::swap(a1, a2);
    }
    //g << (int) a1[0];
    for (int i = a1[0]; i >= 1; i--)
        g << (int)a1[i];

    return 0;
}