Cod sursa(job #18999)

Utilizator szakiold name szaki Data 18 februarie 2007 16:57:55
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
/*#include "stdafx.h"
#include "infoarena.h"

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

#define _GHIOZDAN_
#ifdef _GHIOZDAN_

#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][201];
int o[200];
int q[75001], s, e;
int inq[75001];
int m;

int n, g;

#define min(a,b)            (((a) < (b)) ? (a) : (b))

int main()
{
    clrscr();
    FILE *fin = fopen("ghiozdan.in", "r");
    int i,j,k;
    fscanf(fin, "%d %d", &n, &g);
    
    rep(i,n)
    {
        int obj;
        fscanf(fin, "%d", &obj);
        if (!o[obj])
        {
            a[obj][obj] = 1;
            q[e++] = obj;
            inq[obj] = 1;
            o[obj] = 1;
        } 
        else o[obj]++;
    }
    
    while (s<=e)
    {
        int to = min(200, g-q[s]);
        for(i=1;i<=to;i++)
        {
            if (a[q[s]][i] < o[i] && !inq[q[s]+i])
            {
                q[e] = q[s]+i;
                memcpy((void*)a[q[e]], (void*)a[q[s]], 201);
                a[q[e]][i]++;
                inq[q[e]] = inq[q[s]]+1;
                e++;
            }
        }
        s++;
    }

    for(i=g; i>0; i--) if (inq[i]) break;
    printf("%d %d\n", i, inq[i]);
    for(j=1;j<=200;j++) rep(k,a[i][j]) printf("%d\n", j);

    getch();
    return 0;
}
#endif