Cod sursa(job #2243186)

Utilizator vladisimovlad coneschi vladisimo Data 20 septembrie 2018 09:07:04
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <algorithm>
#include <cstdio>
#include <string.h>

bool myComp(int a[], int b[]) {
  if (a[0] > b[0])
    return true;
  if (a[0] < b[0])
    return false;
  for (int i = 1; i <= a[0]; i++)
    if (a[i] > b[i])
      return true;
    else if (a[i] < b[i])
      return false;
  return true;
}

void myPrint(int a[]) {
  for (int i = a[0]; i >= 1; i--)
    printf("%d", a[i]);
}

void myProd(int a[], int b[]) {
  int t = 0, c[2 + 1000];
  memset(c, 0, sizeof(c));
  c[0] = a[0] + b[0] - 1;
  for (int i = 1; i <= a[0]; i++)
    for (int j = 1; j <= b[0]; j++)
      c[i + j - 1] += a[i] * b[j];
  for (int i = 1; i <= c[0]; i++) {
    c[i] += t;
    t = c[i] / 10;
    c[i] %= 10;
  }
  if (t > 0) {
    c[0]++;
    c[c[0]] = t;
  }
  memcpy(a, c, sizeof(c));
}

int main() {
  freopen("prod.in", "r", stdin);
  freopen("prod.out", "w", stdout);
  int a[2 + 1000], b[2 + 1000], freq[2 + 9];
  for (int i = 1; i <= 9; i++)
    scanf("%d", &freq[i]);
  a[0] = b[0] = 0;
  for (int i = 9; i >= 1; i--) {
    for (int j = 1; j <= freq[i]; j++)
      if (myComp(a, b)) {
        b[0]++;
        b[b[0]] = i;
      } else {
        a[0]++;
        a[a[0]] = i;
      }
  }
  std::reverse(a + 1, a + a[0] + 1);
  std::reverse(b + 1, b + b[0] + 1);
  myProd(a, b);
  myPrint(a);
  return 0;
}