Cod sursa(job #1839738)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 3 ianuarie 2017 13:40:17
Problema Nunta Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <vector>
#define BASE 100000000
using namespace std;
FILE *f=fopen("nunta.in","r");
FILE *g=fopen("nunta.out","w");
vector<int> V[4];
int N;
vector<int> add(vector<int> a,vector<int> b)
{
    vector<int> c;
    c.clear();
    int n=max(a.size(),b.size()),t=0;
    for(int i=0;i<n||t;i++)
    {
        c.push_back((i<a.size() ? a[i]:0)+(i<b.size() ? b[i]:0)+t);
        t=c[i]/BASE;
    }
    return c;
}
void copiere(vector<int> &a,vector<int> &b)
{
    vector<int> ::iterator it=b.begin();
    a.assign(it,b.end());
}
int main()
{
    fscanf(f,"%d",&N);
    V[2].push_back(1);
    V[3].push_back(2);
    if(N<=2)
    {
        fprintf(g,"%d",(N==1 ? 1:2));
    }
    else
    {
        int i=3;
        while(i<=N)
        {
            copiere(V[1],V[2]);
            copiere(V[2],V[3]);
            V[3]=add(V[1],V[2]);
            i++;
        }
        int n=V[3].size();
        for(int i=n-1;i>=0;i--)
        {
            int CB=BASE/10;
            while(CB>V[3][i]&&i!=n-1)
            {
                CB/=10;
                fprintf(g,"0");
            }
            fprintf(g,"%d",V[3][i]);
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}