Pagini recente »
Borderou de evaluare (job #792912)
|
Borderou de evaluare (job #227130)
|
vaslui_cls9_18.01
|
Istoria paginii runda/oji_2017_9
|
Cod sursă (job #691450)
Cod sursă (job
#691450)
#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;
}