Cod sursa(job #773345)

Utilizator danalex97Dan H Alexandru danalex97 Data 1 august 2012 15:19:30
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;

ifstream F("kcover.in");
ofstream G("kcover.out");

#define Nmax 100011
#define Lung 100000011

int T,N,K,Act;
long long A[Nmax],Sum,x;
char Str[Lung];

priority_queue < int > H;

void Get( long long &Rez )
{
	Rez=0;
	int neg=1;
	
	while ( !((Str[Act]>='0' && Str[Act]<='9') || Str[Act]=='-') ) ++Act;
	if ( Str[Act]=='-' ) ++Act,neg=-1;
	while ( Str[Act]>='0' && Str[Act]<='9' ) Rez=Rez*10+Str[Act++]-'0';
	
	Rez*=neg;
}

int main()
{
	for (F>>T;T;--T)
	{
		F>>N>>K;
		Act=0;
		F.getline(Str,Lung,'\n');
		F.getline(Str,Lung,'\n');
		--K;
		
		if ( N==1 )
		{
			Get(x);
			G<<"0\n";
			continue;
		}
		
		for (int i=1;i<=N;++i)
			Get(A[i]);
		
		sort(A+1,A+N+1);
		Sum=A[N]-A[1];
		
		for (int i=1;i<N;++i)
			H.push(A[i+1]-A[i]);
		
		for (int i=N-1;K && i;--i,--K)
			Sum-=H.top(), H.pop();
		G<<Sum<<'\n';
		
		for (int i=1;i<=N;++i) A[i]=0;
		while ( H.size() ) H.pop();
	}
}