Cod sursa(job #2155620)

Utilizator NeredesinI am not real Neredesin Data 7 martie 2018 22:53:52
Problema Rsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <algorithm>
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("aladdin2.in");
ofstream out("aladdin2.out");

const int NMAX = 5000;
const int k = 1024;

int n, m;
int v[1 + NMAX];
int a[1 + NMAX];

void mult(int a[], int b) {
  int i, t = 0;
  for(i = 1; i <= a[0] || t; i++, t /= 10)
    a[i] = (t += a[i] * b) % 10;
  a[0] = i - 1;
}

void add(int a[], int b[]) {
  int i, t = 0;
  for(i = 1; i <= a[0] || i <= b[0] || t; i++, t/=10)
    a[i] = (t += a[i] + b[i]) % 10;
  a[0] = i - 1;
}

void sub(int a[], int b[]) {
  int i, t = 0;
  for(i = 1; i <= a[0]; i++) {
    a[i] -= ((i <= b[0]) ? b[i] : 0) + t;
    a[i] += (t = a[i] < 0) * 10;
  }

  while(1 < a[0] && !a[a[0]])
    a[0]--;
}

int main()
{
  in >> n >> m;
  v[0] = v[1] = 1;
  a[0] = a[1] = 1;

  for(int i = 1; i <= n / 10; i++)
    mult(v, k);
  for(int i = 1; i <= n % 10; i++)
    mult(v, 2);

  for(int i = 1; i <= m / 10; i++)
    mult(a, k);
  for(int i = 1; i <= m % 10; i++)
    mult(a, 2);
  add(v, a);

  fill(a, a + NMAX + 1, 0);
  a[0] = 1;
  a[1] = 2;

  sub(v, a);
  for(int i = v[0]; i >= 1; i--)
    out << v[i];

  in.close();
  out.close();
  return 0;
}