Mai intai trebuie sa te autentifici.
Cod sursa(job #18856)
Utilizator | Data | 18 februarie 2007 14:21:20 | |
---|---|---|---|
Problema | Ghiozdan | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.34 kb |
/*#include "stdafx.h"
#include "infoarena.h"
//#include <conio.h>/**/
#include <stdio.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];
int nr[75001];
int last[75001];
int o[201];
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;
for(i=1;i<=200;i++) 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;
}
#endif