#include #include using namespace std; struct machine{ int usage; int recovery; }; int main(){ vector jim(10); for(int i = 0; i < 10; i++){ cin >> jim[i].usage; cin >> jim[i].recovery; } vector others(10); vector starts(10); int cur_time = 0; for(int i = 0; i < 10; i++){ cin >> others[i].usage; cin >> others[i].recovery; cin >> starts[i]; cur_time = min(cur_time, starts[i]); } int cur_rotation = 1; int cur_machine = 0; bool done = false; vector in_use(10, false); bool jim_using = false; bool jims_resting = false; int jims_done = 0; while(!done){ // cout << "Time = " << cur_time << endl; for(int i = 0; i < 10; i++){ if(cur_time == starts[i] && cur_machine == i && jim_using){ starts[i] = jims_done; //cout << "Machine " << i << " gets delayed till " << starts[i]; } if(cur_time == starts[i]){ //cout << "User starts using machine " << i << endl; in_use[i] = true; } if(in_use[i] && cur_time == starts[i] + others[i].usage){ //cout << "User stops using machine " << i << endl; in_use[i] = false; starts[i] = cur_time + others[i].recovery; } if(cur_machine == i){ if(cur_time >= 0 && jims_resting && jims_done == cur_time){ // cout << "Jim is done resting" << endl; jims_resting = false; cur_machine = (cur_machine+1)%10; if(cur_machine == 0){ cur_rotation++; cur_time--; } } } if(cur_machine == i){ if(cur_time >=0 && jim_using && cur_time == jims_done){ // cout << "Jim is done with machine " << i << endl; jim_using = false; jims_resting = true; if(cur_rotation == 3 && cur_machine == 9) done = true; jims_done = cur_time + jim[i].recovery; } if(cur_time >=0 && !jim_using && !jims_resting){ if(!in_use[i]){ // cout << "Jim starts using machine " << i << endl; jim_using = true; jims_done = cur_time + jim[i].usage; } } } } if(!done) cur_time++; } cout << cur_time << endl; return 0; }