Cod sursa(job #1028325)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 13 noiembrie 2013 21:05:54
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("numar4.in");
ofstream g("numar4.out");

int ni, nz, nr[2001], i, ok, c, j=1, rez[2001], l, inc, inc2, inc5, ni_r, nz_r, zec[2001], lz;
int impartire(int a[],int imp, int len);
int verificare(int a[],int imp, int len);

int main()
{
    f>>ni>>nz;
    
    for (i=ni+nz; i>=nz+1; i--)
    {
        f>>nr[i];
        if (nr[i]!=0)
        {
            ok=1;
        }
        else if(ok==0)
        {
            ni_r++;
        }
    }
    for (i=nz; i>=1; i--)
    {
        f>>nr[i];
        if (nr[i]!=0)
        {
            nz_r=0;
        }
        else
        {
            nz_r++;
        }
    }
    
    //initializare
    l=ni+nz-ni_r;
    lz=nz+1;
    for (i=ni+nz-ni_r; i>nz_r; i--)
    {
        rez[i]=nr[i];
    }
    zec[lz]=1;
    
    while(!verificare(rez, 5, l) && !verificare(zec, 5, lz))
    {
        l=impartire(rez, 5, l);
        lz=impartire(zec, 5, lz);
    }
    while(!verificare(rez, 2, l) && !verificare(zec, 2, lz))
    {
        l=impartire(rez, 2, l);
        lz=impartire(zec, 2, lz);
    }
    
    g<<l-nz_r<<'\n';
    for (i=l; i>nz_r; i--)
    {
        g<<rez[i];
    }
    g<<'\n';
    
    g<<lz-nz_r<<'\n';
    for (i=lz; i>nz_r; i--)
    {
        g<<zec[i];
    }
    
    return 0;
}

int impartire(int a[],int imp, int len)
{
    int R=0;
    for (i=len;i>nz_r;i--)
    {
        R=10*R+a[i];
        a[i]=R/imp;
        R%=imp;
    }
    while (!a[len] && len>1)
        len--;
    return len;
}

int verificare(int a[], int imp, int len)
{
    int t = 0;
    for (i = len; i > nz_r; i--)
        t = (t * 10 + a[i]) % imp;
    return t;
}