fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int a[100003],b[100003];
  5.  
  6. int main()
  7. {
  8. long long t1,t2,t,n,i,j,l;
  9.  
  10. cin>>n>>t1>>t2;
  11. t=0;
  12. //Заполняем время прихода пациентов на приём в массив a
  13. for(i=1; i<=n; i++) cin>>a[i];
  14. //Заполняем время на приём пациентов в массив b
  15. for(i=1; i<=n; i++) cin>>b[i];
  16. //Проверяет приходит ли пациент в начале приёма/после начала приёма
  17. if(a[1]>=t1){
  18. cout<<t1<<endl;
  19. return 0;
  20. }
  21. //Вводим точки отсчёта
  22. else{
  23. t=a[1];
  24. l=t1-a[1];
  25. t1+=b[1];
  26. }
  27. j=2;
  28. //Условие: Если разница между началом приёма и приёмом > 0; цикл не прошёл всех пациентов; приём ещё не окончен.
  29. while(l>0 && j<=n && t1<t2)
  30. {
  31. //Проверяет приходит ли следующий пациен к началу/после начала своего приёма
  32. if(a[j]>=t1){
  33. t=t1;
  34. l=0;
  35. }
  36. else{
  37. //Проверяет является ли разница между началом приёма следующего пациента и временем его прихода меньше, чем прыдидущая зафиксированная разницы
  38. if(t1-a[j]<l){
  39. t=a[j];
  40. l=t1-a[j];
  41. }
  42. t1+=b[j];
  43. }
  44. j++;
  45. }
  46. //Если время приёма ещё не окончено, пациенты все прошли и прийти раньше не получилось - приходим сразу в конце приёма последнего
  47. if(t1<t2 && l!=0 && j>n){
  48. t=t1;
  49. l=0;
  50. }
  51. cout<<t<<endl;
  52. }
Success #stdin #stdout 0.01s 4648KB
stdin
3 10 20
7 14 18
5 2 1
stdout
17