Cod sursa(job #2415585)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 26 aprilie 2019 12:02:48
Problema Prod Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("prod.in");
ofstream g ("prod.out");
const int nmax=1e3+3;
int t,v[13],t1[nmax],t2[nmax],usu[3*nmax],p;
inline bool cmp() //le compar sa vad care mai trebuie crescuta
{
    if(t1[0]!=t2[0]) return t1[0]>t2[0];
    for(int i=1;i<=t1[0];++i) if(t1[i]!=t2[i]) return t1[i]>t2[i];
    return false;
}
int main()
{
    ios::sync_with_stdio(false);
    for(int i=1;i<=9;++i) f>>v[i];
    for(int i=9;i>0;--i) //le aduc la mijloc
    {
        while(v[i])
        {
            if(cmp()) t2[++t2[0]]=i;
            else t1[++t1[0]]=i;
            --v[i];
        }
    }
    for(int i=t1[0];i;--i) //fac inmultirea
    {
        for(int j=t2[0];j;--j) usu[t1[0]+t2[0]-i-j+1]+=t1[i]*t2[j];
    }
    usu[0]=t1[0]+t2[0]-1;
    int p=1;
    while(p<=usu[0]||t!=0) //fac transporturile
    {
        usu[p]+=t;
        t=usu[p]/10;
        usu[p]%=10;
        ++p;
    }
    usu[0]=max(usu[0],p-1);
    for(p=usu[0];p;--p) g<<usu[p];
    return 0;
}