Cod sursa(job #2887189)

Utilizator Tudose_StefanTudose Alexandru Stefan Tudose_Stefan Data 8 aprilie 2022 22:59:54
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 3.22 kb
#include <fstream>
#include <cstdlib>
#include <vector>

using namespace std;

fstream fin("deque.in");
ofstream fout("deque.out");

void adaugFata(vector <int> & nums, int nr, int &fata, int &spate);
void scoateFata(vector <int> &nums, int &fata, int &spate);
void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate);
int damiFata(vector <int> &nums, int &fata, int &spate);
int damiSpate(vector <int> &nums, int &fata, int &spate);
void scoateSpate(vector <int> &nums, int &fata, int &spate);

long long sum;
vector <int> dichiu, numere;
int nrElDq, nrElem, lSubsir, i, fata, spate, k, cuc, banana;
bool adaugat = 0;

int main()
{
    fin >> nrElem >> lSubsir;
    dichiu.assign(lSubsir, 0);
    numere.assign(nrElem, 0);
    fata = -1;
    spate = 0;
    for (i = 0; i < nrElem; i++)
        fin >> numere[i];
    adaugFata(dichiu, 0, fata, spate);
    k = 1;
    if (nrElem == 1)
    {
        fout << numere[0];
        return 0;
    }
    if (lSubsir == 1)
    {
        for (i = 0; i < nrElem; i++)
            sum += numere[i];
        fout << sum;
        return 0;
    }
    for (i = 1; i <nrElem; i++)
    {
        if (i == 7)
            banana = numere[i];
        cuc = numere[damiFata(dichiu, fata, spate)];
        adaugat = 0;
        if (k == lSubsir)
        {
            cuc = numere[damiFata(dichiu, fata, spate)];
            if (damiFata(dichiu, fata, spate) == i-k)
                scoateFata(dichiu, fata, spate);
                cuc = numere[damiFata(dichiu, fata, spate)];
        }
        else
            k++;
        if (numere[i] < numere[damiFata(dichiu, fata, spate)])
        {
            while (numere[i] < numere[damiFata(dichiu, fata, spate)])
            {
                cuc = numere[damiFata(dichiu, fata, spate)];
                scoateFata(dichiu, fata, spate);
                if (nrElDq == 0)
                    break;
            }
            adaugSpate(dichiu, i, fata, spate);
            cuc = numere[damiFata(dichiu, fata, spate)];
        }
        else
        {
            while (numere[i] < numere[damiSpate(dichiu, fata, spate)])
                scoateSpate(dichiu, fata, spate);
            adaugSpate(dichiu, i, fata, spate);
        }

        if (k == lSubsir)
            sum += numere[damiFata(dichiu, fata, spate)];
    }
    fout << sum;
    return 0;
}

void adaugFata(vector <int> & nums, int nr, int& fata, int& spate)
{

    fata++;
    if (fata == nums.size())
        fata = 0;
    nums[fata] = nr;
    nrElDq++;
}

void scoateFata(vector <int> &nums, int &fata, int &spate)
{
    nums[fata] = 0;
    fata--;
    if (fata < 0)
        fata = nums.size()-1;
    nrElDq--;
}

void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate)

{
	spate--;
    if (spate < 0)
        spate = nums.size()-1;
    nums[spate] = nr;
    nrElDq++;
}

void scoateSpate(vector <int> &nums, int &fata, int &spate)
{
    nums[spate] = 0;
    spate++;
    if (spate == nums.size())
        spate = 0;
    nrElDq--;
}

int damiFata(vector <int> &nums, int &fata, int &spate)
{
    return nums[fata];
}

int damiSpate(vector <int> &nums, int &fata, int &spate)
{
    return nums[spate];
}