Sizin dəbli ayıklayıcınız bu məsələdə sizə kömək etməyəcək. Kodun ayıklama və buraxılış yığınları arasında fərqli davranışlar göstərməsinə səbəb ola biləcək bir çox yol var və bu baş verdikdə, daha primitiv ayıklama formalarına müraciət etmək lazım ola bilər.
Beləliklə, siz və printf funksiyanız buraxılışın uğursuzluğuna səbəb olan kod sətirini axtarırsınız. Bununla belə, şanslısınız: bu proqrama printf operatorları əlavə etmək nə xətaya (o, yenə də eyni ilkin kod sətirində uğursuz olur), nə də icra vaxtına təsir etmir (ən azından, xüsusilə deyil). Beləliklə, hər sətirdən əvvəl printf operatorunu yerləşdirmək, proqramı uğursuzluğa qədər işə salmaq və son çap edilmiş sətiri yoxlamaq kimi sadə yanaşma işləyəcək.
Lakin, koda hər printf təlimatını əlavə etmək bir qədər vaxt tələb edir və proqramda çoxlu sətir ola bilər. Buna görə də, bəlkə də ən yaxşı plan printf təlimatını proqramın ortasına yerləşdirməkdir. Sonra proqramı işə salın və printf əmri əlavə edilməzdən əvvəl uğursuzluğun baş verib-vermədiyini görün, sonra axtarışı kodun birinci və ya ikinci yarısında davam etdirin.
Amma yenə də, proqramın işə salınması çox vaxt apara bilər, buna görə də vaxt baxımından ən səmərəli strategiya orta bir şey ola bilər. printf operatorlarınızı yerləşdirmək üçün optimal strategiyanı seçdiyinizi nəzərə alaraq, uğursuz olan sətiri tapmaq üçün ən pis halda minimum vaxtı hesablayan bir proqram yazın.
Beş saatdan sonra yeni versiyanı buraxırıq, buna görə də məsələ kəskinləşir və mümkün qədər tez həll edilməlidir.
Bir sətirdən ibarətdir və üç tam ədədi ehtiva edir:
n (1 ≤ n ≤ 10^6) - kod sətirlərinin sayı;
r (1 ≤ r ≤ 10^9) - uğursuzluq nöqtəsinə qədər proqramın tərtib edilməsi və işləməsi üçün lazım olan vaxt;
p (1 ≤ p ≤ 10^9) - bir printf sətirinin əlavə edilməsi üçün tələb olunan vaxt.
Siz artıq proqramı bir dəfə işə salmısınız və buna görə də onun haradasa uğursuz olduğunu artıq bilirsiniz.
Optimal strategiyadan istifadə edərək uğursuz olan sətiri tapmaq üçün lazım olan ən pis vaxtı göstərin.
Nümunə 1
Nümunə 2
Nümunə 3