Cod sursa(job #253755)

Utilizator drag0s93Mandu Dragos drag0s93 Data 6 februarie 2009 12:10:03
Problema Caramizi Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.08 kb
#include<stdio.h>

#include<stdlib.h>

int n,m,c[200000],t[20000000],cc[200000];

void read()
{
	freopen("caramizi.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&c[i]);
		cc[i]=c[i];
	}
	for(int j=1;j<=m;++j)
		scanf("%d",&t[j]);
}
int compar(const void *q,const void *p)
{
	int x=*(int*)q,y=*(int*)p;
	if(x>y)
		return 1;
	else return -1;
	return 0;
}
int solve()
{
	int caramizi=n-1,cara=0,cj=0,ccara=0,min=0,j,i,p;
	freopen("caramizi.out","w",stdout);
	for(i=1;i<=n;++i)
		if(t[i]<=c[1])
			printf("%d\n",t[i]*n);
		else
		{
			for(;caramizi>1;--caramizi)
			{
				qsort(c+1,n,sizeof(c[0]),compar);
				for(j=n-caramizi;j<=caramizi;++j)
				{
					if(cara+c[n-caramizi]<=t[i])
					{
						cara+=c[n-caramizi];
						c[j]-=c[n-caramizi];
						for(int w=n-caramizi;w<=n;++w)
							c[w]=c[w+1];
					}
					else 
						j=n-caramizi-1;
				}
				if(cara>ccara)
					ccara=cara;
				cara=0;
			}
			printf("%d\n",ccara);
			for(p=1;p<=n;++p)
				c[p]=cc[p];
		}
	
}
int main()
{
	read();
	solve();
	return 0;
}