Cod sursa(job #2671330)

Utilizator victorzarzuZarzu Victor victorzarzu Data 11 noiembrie 2020 22:09:40
Problema Prod Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
	
#include <bits/stdc++.h>
 
using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int cif[10], s;
int n1[2005], n2[2005], rez[2005];
 
void Read()
{
  for(int i = 1;i <= 9;++i)
    f>>cif[i];
}

bool compare()
{
  for(int i = 1;i <= n1[0];++i)
    if(n1[i] != n2[i])
      return n1[i] < n2[i];
  return true;
}

bool numbers()
{
  for(int i = 9;i >= 1;--i)
    while(cif[i])
    {
      if(n1[0] < n2[0]) n1[++n1[0]] = i;
      else if(n1[0] > n2[0]) n2[++n2[0]] = i;
      else
      {
        if(compare())
          n1[++n1[0]] = i;
        else
          n2[++n2[0]] = i;
      }
      --cif[i];
    }
  reverse(n1 + 1, n1 + n1[0] + 1);
  reverse(n2 + 1, n2 + n2[0] + 1);
}

void multiply()
{
  int i, j, t;
  for(i = 1;i <= n1[0];++i)
    {
      for(t = 0, j = 1;j <= n2[0] || t;++j, t /= 10)
        rez[i + j - 1] = (t += rez[i + j - 1] + n1[i] * n2[j]) % 10;
      rez[0] = max(rez[0], i + j - 2);
    }
}
 
void Solve()
{
  numbers();
  multiply();
  for(int i = rez[0];i >= 1;--i)
    g<<rez[i];
}

int main()
{
  Read();
  Solve();
  return 0;
}