Cod sursă (job #691450)

Utilizator avatar ridiche34 Tudor Diaconu ridiche34 IP ascuns
Problemă Ruleta1 ( clasa a 6-a ) Compilator cpp-32 | 2,35 kb
Rundă Arhiva de probleme Status evaluat
Dată 30 ian. 2023 09:14:11 Scor 90
#include <fstream>
#include <vector>
#include <iostream>

using namespace std;

void printVector(vector<pair<long,int>> &nr)
{
    /*for (int i = 0; i < nr.size(); i++)
    {
        cout << nr[i].first << " ";
    }
    cout << "\n";*/
}

int main()
{
    ifstream in;
    ofstream out;
    in.open("ruleta1.in");
    out.open("ruleta1.out");
    long n, r = 0, t = 0, aux = 0; bool schimbat = 1;
    in >> n;
    vector<pair<long,int>> nr;

    for (long i = 0; i < n; i++)
    {
        in >> aux;
        nr.push_back({aux,(i + 1) % n});
    }
    while (schimbat)
    {
        printVector(nr);

        schimbat = 0; r++;

        for (int i = 0;; i = nr[i].second)
        {
            int dif;
            if (i != n - 1)
                dif = nr[i + 1].first - nr[i].first;
            else
                dif = nr[0].first - nr[n - 1].first;

            if (dif >= 0 && nr[i].first)
            {
                if (i != n - 1)
                    nr[i+1].first -= nr[i].first;
                else
                    nr[0].first -= nr[n-1].first;
                schimbat = 1;
            }

            if (nr[i].first == 0)
            {
                if (i != 0 && i != n - 1)
                    nr[i - 1].second = nr[i].second;
            }

            if (nr[i].second < i)
                break;
        }


/*
        for (list<pair<long,bool>>::iterator it = nr.begin(); it != prev(nr.end()); it++)
        {
            if ((!next(it)->second) it->first - next(it)->first > 0)
            {
                if (it->first <= next(it)->first && !(it->second))
                {
                    next(it)->first -= it->first;
                    schimbat = 1;
                }
            }
            else if (!(next(it)->first) || (next(it)->first < it->first))
            {
                if (next(it)->first)
                    t++;
                nr.erase(next(it));
                it->second = 1;
            }
        }
        if (prev(nr.end())->first && nr.begin()->first >= prev(nr.end())->first)
        {
            nr.begin()->first -= prev(nr.end())->first;
            schimbat = 1;
        }*/
    }
    printVector(nr);
    for (int i = 0; i < n; i++)
    {
        if (nr[i].first)
            t++;
    }
    out << r << " " << t;
    return 0;
}