С++
X студентов получили соответствующие оценки, независимо от полученных оценок, каждый студент должен был защищать свою работу по очереди. После каждой защиты продолжительностью в одну минуту оценка ученика повышается на один балл. Если после защиты оценка студента положительная (5 и более), студент идёт домой. Если после защиты оценка студента остается отрицательной, студент переходит в конец очереди и ждет следующей защиты. За сколько минут Петя будет дома?

Приложения:

Леганда555: а какие ограничения на количество человек и на их оценки?

Ответы

Ответ дал: oficus
1

Ответ:

#include <iostream>

#include <deque>

#include <locale.h>

#include <dirent.h>

#include <windows.h>

using namespace std;

int main(){

   setlocale(LC_ALL, "Russian");

   SetConsoleCP(1251);

   SetConsoleOutputCP(1251);

   int n;

   cin >> n;

   int mark, mark_petya = 0;

   string name;

   pair <string, int> p;

   deque <pair <string, int>> d;

   for(int i = 0; i < n; i++){

       cin >> name >> mark;

       p = {name, mark};

       d.push_back(p);

   }

   int cnt = 0;

   while(mark_petya < 5){

       p = d.front();

       d.pop_front();

       name = p.first;

       mark = p.second + 1;

       p = {name, mark};

       if(name == "Петя")

           mark_petya = mark;

       if(mark < 5)

           d.push_back(p);

       cnt++;

   }

   cout << cnt;

   return 0;

}

Объяснение:


stglupa: а зачем дек-то?) Можно было обычной очередью обойтись. Мы забираем чела только сначала и добавляем только в конец - классика FIFO
oficus: да как-то начал писать, особо не продумав, что лучше дек или очередь, поэтому взял дек, т.к. он более функционален)
Ответ дал: stglupa
1

#include <iostream>

#include <vector>

using namespace std;

void solve(){

   int x, cnt = 0, petyaIndex = -1;

   cin >> x;

   vector<pair<string, int>> a(x);

   for(int i = 0; i < x; i++){

       cin >> a[i].first >> a[i].second;

       if(a[i].first == "Petya")

           petyaIndex = i;

   }

   for(int i = 0; i < x; i++){

       if(i <= petyaIndex)

           cnt += max(1, 5 - a[i].second);

       else

           cnt += min(max(1, 5 - a[petyaIndex].second) - 1, max(1, 5 - a[i].second));

   }

   cout << cnt;

}

int main(){

   solve();

}

Приложения:
Вас заинтересует