Cod sursa(job #709366)

Utilizator StrajanStrajan Sebastian Ioan Strajan Data 8 martie 2012 00:19:58
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <iostream>

using namespace std;

struct Nod{
	int valoare;
	Nod* adr_urm;
};

void init(int a, Nod*& start, Nod*& end){
	start = new Nod;
	start->valoare = a;
	start->adr_urm = 0;
	end = start;
}

void adauga(int a, Nod*& start, Nod*& end){
	Nod* elem;

	elem = new Nod;
	elem->adr_urm = 0;
	elem->valoare = a;
	end->adr_urm = elem;
	end = elem;
}

void findMin(long nrElemente, Nod* start, long& suma){
	int min = start->valoare;
	Nod* minNod = start;
	for (long i=0; i<nrElemente; i++){
		if (start->valoare < min){
			min = start->valoare;
			minNod = start;
		}
		start = start->adr_urm;
	}
	suma = suma + minNod->valoare;
}

void citire(long& n, long& k, Nod*& start, Nod*& end, long& suma){
	int nrCitit;
	ifstream fileIN;
	fileIN.open("deque.in");
	fileIN>>n>>k;

	fileIN>>nrCitit;
	init(nrCitit, start, end);
	int j = 1, k1 = 1;
	Nod* elem;
	for (long i=1; i<n; i++){
		fileIN>>nrCitit;
		adauga(nrCitit, start, end);
		j++;
		if (k == j){
			findMin(k, start, suma);
			j = j-1;
			elem = start;
			start = start->adr_urm;
			delete elem;
		}
	}
	fileIN.close();
}


int main(){
	Nod* start = NULL, * end, *q, *p;
	long n, k;

	long suma = 0;

	citire(n, k, start, end, suma);

	ofstream fileOUT;

	fileOUT.open("deque.out");
	fileOUT<<suma;
	fileOUT.close();
	return 0;
}