Cod sursa(job #2670867)

Utilizator victorzarzuZarzu Victor victorzarzu Data 10 noiembrie 2020 20:01:52
Problema Prod Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int cif[10], s;
vector<int> n1, n2, rez;

void Read()
{
  for(int i = 1;i <= 9;++i)
    f>>cif[i];
}

bool compare()
{
  for(int i = 0;i < min(n1.size(), n2.size());++i)
    if(n1[i] < n2[i])
      return true;
    else if(n1[i] > n2[i])
      return false;
  if(n1.size() < n2.size())
    return true;
  else
    return false;
}

void numbers()
{
  int c = 9;
  while(true)
  {
    if(!cif[c])
    {
      --c;
      if(c == 0)
      {
        reverse(n1.begin(), n1.end());
        reverse(n2.begin(), n2.end());      
        return;
      }
      continue;
    }
    if(compare())
      n1.push_back(c);
    else
      n2.push_back(c);
    --cif[c];
  }
  
}

void multiply()
{
  int t = 0;
  s = n1.size() + n2.size(); 
  for(int i = 0;i <= n1.size() + n2.size();++i)
    rez.push_back(0);

  for(int i = 1;i <= n1.size();++i)
    for(int j = 1;j <= n2.size();++j)
      {
        rez[i + j - 1] += n1[i - 1] * n2[j - 1] + t;
        t = rez[i + j - 1] / 10;
        rez[i + j - 1] %= 10;
      }
   if(t)
    rez[s] = t;
}

void Solve()
{
  numbers(); 
  multiply();
  for(int i = s;i >= 1;--i)
    g<<rez[i];
}

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