Cod sursa(job #382159)

Utilizator victor.ionescuIonescu Victor Cristian victor.ionescu Data 13 ianuarie 2010 03:02:57
Problema Coduri Huffman Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#define MAXN 1000006
int N,M;
long long C1[MAXN],C2[6*MAXN];


int main(){

	freopen("scandura.in","rt",stdin);
	freopen("scandura.out","wt",stdout);

	scanf("%d %d\n",&N,&M);

	for (int i=1;i<=N;++i) scanf("%lld",&C1[i]);

	fclose(stdin);

	int s1=1,e1=N,s2=1,e2=0;

	long long rez=0;

	while ((e1-s1+1+e2-s2+1)>1){
		long long sum=0;
		for (int i=1;i<=M;++i){
			long long y=-1;
			int cv=0;
			if (s1<=e1) { y=C1[s1]; cv=1; }
			if (s2<=e2 && (y==-1 || y>C2[s2])) { y=C2[s2]; cv=2; }
			if (y!=-1){
				if (cv==1) ++s1; else ++s2;
				sum+=y;
			}
		}
		C2[++e2]=sum;
		rez+=sum;
	}
			
	printf("%lld\n",rez);

	fclose(stdout);

	return 0;
}