Cod sursa(job #2573997)

Utilizator DanielBarbulescuDaniel Barbulescu DanielBarbulescu Data 5 martie 2020 19:55:08
Problema Deque Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 2.07 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef struct NODE {
	int data;
	int pozitia;
	struct NODE* next;
	struct NODE* prev;
}nod;


struct DEQUE {
	struct NODE* head;
	struct NODE* tail;
};

nod* formare(nod**cap,int* v, int n)
{
	nod* p = (nod*)malloc(sizeof(nod));
	for (int i = 0;i < n;i++)
	{
		nod* temp = (nod*)malloc(sizeof(nod));
		temp->data = v[i];
		temp->pozitia = i;
		if ((*cap) == NULL)
		{
			temp->next = NULL;
			temp->prev = NULL;
			(*cap) = temp;
			p = temp;
		}
		else
		{
			p->next = temp;
			temp->next = *cap;
			(*cap)->prev = temp;
			temp->prev = p;
			p = temp;
		}
		
	}

	return *cap;
}


int main()
{
	FILE* in = fopen("deque.in.txt", "r");
	if (in == NULL)
	{
		printf("Eroare la formarea fisierului DEQUE.IN");
		return 1;
	}
	FILE* out = fopen("deque.out.txt", "w");
	
	int n, k;
	fscanf(in, "%d", &n);
	fscanf(in, "%d", &k);
	int* v = (int*)malloc(sizeof(int) * n);	
	for (int i = 0;i < n;i++)
		fscanf(in, "%d", &v[i]);

	

	nod* cap = (nod*)malloc(sizeof(nod));
	cap = NULL;
	cap = formare(&cap,v, n);
	nod* coada = (nod*)malloc(sizeof(nod));
	coada=cap->prev;
	
	//VERIFIC DACA MI AM FORMAT BINE LISTA DUBLU INLANTUITA
	/*printf("Capul este nodul cu val %d si adresa %p are PREV: %p si NEXT: %p\n ", cap->data, cap, cap->prev, cap->next);
	for (int i = 0;i < n;i++)
	{
		printf("nodul cu val %d si adresa %p are PREV: %p si NEXT: %p\n ", cap->data, cap, cap->prev, cap->next);
		cap = cap->next;
	}
	printf("\nCOADA este nodul cu val %d si adresa %p are PREV: %p si NEXT: %p\n ", coada->data, coada, coada->prev, coada->next);*/

	int suma = 0,done=0; 
	int min = cap->data;
	nod* p = (nod*)malloc(sizeof(nod));
	p = cap;
	for (int i = 0;i <= n-k&&done==0;i++)
	{
		nod* q = (nod*)malloc(sizeof(nod));
		q = p;
		while (p->pozitia <i+k&&done==0)
		{
			if (p->data < min)
				min = p->data;
			if (p->pozitia == n - 1)
				done = 1;
			p = p->next;
		}
		suma = suma + min;
		p = q;
		p = p->next;
		min = p->data;
	}

	printf("%d", suma);
}