Cod sursa(job #849584)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 7 ianuarie 2013 12:17:42
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int n,m;
int ct[10],v[1001],a[501],b[501],c[1001];
void prod()
{
    int i,j,t=0,p,n=b[0];
    c[0]=0;
    for(i=n;i;--i)
    {   p=t;
        for(j=n;j>=i;--j)
            p+=a[j]*b[i+n-j];
        t=p/10;
        c[0]++;
        c[c[0]]=p%10;
    }
    for(i=n-1;i;--i)
    {
        p=t;
        for(j=1;j<=i;++j)
            p+=a[j]*b[i-j+1];
        t=p/10;
        c[0]++;
        c[c[0]]=p%10;
    }
    while(t)
    {
        c[0]++;
        c[c[0]]=t%10;
        t/=10;
    }
}
int main()
{
    int i,j;
    for(i=1;i<10;++i)
        f>>ct[i];
    for(i=9;i>=0;--i)
        for(j=1;j<=ct[i];++j)
            v[++n]=i;
    m=n/2;
    for(i=1;i<=2*m&&a[i/2]==b[i/2];i+=2)
    {
        a[0]++;
        a[a[0]]=v[i];
        b[0]++;
        b[b[0]]=v[i+1];
    }
    for(;i<=2*m;i+=2)
    {
        a[0]++;
        a[a[0]]=v[i+1];
        b[0]++;
        b[b[0]]=v[i];
    }
    if(n>2*m)
    {
        b[0]++;
        b[b[0]]=v[i];
    }
    if(a[0]<b[0])
    {
        for(i=b[0];i>1;--i)
            a[i]=a[i-1];
        a[1]=0;
        a[0]=b[0];
    }
    prod();
    for(i=c[0];i;--i)
        g<<c[i];
    return 0;
}