С++
X студентов получили соответствующие оценки, независимо от полученных оценок, каждый студент должен был защищать свою работу по очереди. После каждой защиты продолжительностью в одну минуту оценка ученика повышается на один балл. Если после защиты оценка студента положительная (5 и более), студент идёт домой. Если после защиты оценка студента остается отрицательной, студент переходит в конец очереди и ждет следующей защиты. За сколько минут Петя будет дома?
![](https://st.uroker.com/files/375/375e7f79378f87ed436560910929c03b.png)
Ответы
Ответ:
#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;
}
Объяснение:
#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();
}
![](https://st.uroker.com/files/c55/c55f116436c886f8f256b52d60c3ea88.png)
![](https://st.uroker.com/files/ef6/ef61cede2b0449a6645b8d9cf16d7d1b.png)