Cod sursa(job #18420)

Utilizator szakiold name szaki Data 18 februarie 2007 12:06:53
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.29 kb
/*#include "stdafx.h"
#include "infoarena.h"

//#include <conio.h>/**/
#include <stdio.h>


#ifndef _INC_CONIO
void clrscr()
{
    freopen("ghiozdan.out", "w", stdout);
}
void getch() {}
#else
void clrscr() {}
#endif

#define rep(i,n) for(i=0;i<n;i++)

char a[75001];
int nr[75001];
int last[75001];
int o[200];
int m;
//int ob[20000];

int n, g;

int main()
{
    clrscr();
    FILE *fin = fopen("ghiozdan.in", "r");
    int i,j;
    fscanf(fin, "%d %d", &n, &g);
    
    rep(i,n)
    {
        int ob;
        fscanf(fin, "%d", &ob);
        if (!o[ob]) m++;
        o[ob]++;
        a[ob]=1;
        last[ob] = ob;
        nr[ob]=1;
    }
    n-=m;
    rep(i,200) if(o[i]) o[i]--;

    while(n)
    {
        for(i=1;i<=200;i++) if (o[i])
        {
            o[i]--; n--;
            for(j=1; j <= g-i; j++)
            {
                if (a[j] && !a[j+i])
                {
                    a[j+i]=1;
                    last[j+i] = i;
                    nr[j+i]=nr[j]+1;
                }
            }
        }
        
    }

    for(i = g; i>0; i--)
        if (a[i]) break;

    printf("%d %d\n", i, nr[i]);

    while(i!=0)
    {
        printf("%d\n", last[i]);
        i-=last[i];
    }

    getch();
    return 0;
}