Cod sursa(job #1540760)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 3 decembrie 2015 10:46:49
Problema Ghiozdan Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <stdio.h>
unsigned n,g,i,j,q,v[201],x,sol[75001],ob,best=20001,gmax,dist,k;

void afis()
{
    int i;
    for(i=1;i<=g;i++)
        printf("%d ",i);
    printf("\n");
    for(i=1;i<=g;i++)
    {
        printf("%u ",sol[i]);
        if(i>9)
            printf(" ");
    }
    printf("\n");
}

int main()
{
    FILE *f1,*f2;
    f1=fopen("ghiozdan.in","r");
    f2=fopen("ghiozdan.out","w");
    fscanf(f1,"%u%u",&n,&g);
    for(i=0;i<n;i++)
    {
        fscanf(f1,"%u",&x);
        v[x]++;
    }
    for(q=200;q>0;q--)
    {
        x=q;
        ob=1;
        k=0;
        while(k<v[q] && x<=g)
        {
            if(sol[x]>ob || !sol[x])
            {
                sol[x]=ob;
            }
            else
                ob=sol[x];
            ob++;
            x+=q;
            k++;
        }
        if(v[q])
            for(i=q;i<g;i++)
                if(sol[i] && i!=q)
                {
                    k=0;
                    ob=sol[i]+1;
                    x=i+q;
                    while(k<v[q] && x<=g)
                    {
                        if(!sol[x])
                            sol[x]=ob;
                        //else ob=sol[x];
                        ob++;
                        x+=q;
                        k++;
                    }
                }
    }
    for(i=g;i>0;i--)
        if(sol[i])
        {
            best=sol[i];
            gmax=i;
            break;
        }
    fprintf(f2,"%u %u\n",gmax,best);
    q=1;
    dist=1;
    for(i=1;i<=g && q<=best;i++ , dist++)
        if(sol[i]==q)
        {
            q++;
            fprintf(f2,"%u\n",dist);
            dist=0;
        }
    afis();
    return 0;
}