İki göstərici texnikası
İki göstərici texnikası, kompüter elmləri və proqramlaşdırmada, massivlər və ya ardıcıllıqlar ilə bağlı problemlərin həlli üçün geniş istifadə olunan bir strategiyadır. Bu, massiv və ya ardıcıllığı müxtəlif mövqelərdən keçən iki göstəricinin istifadəsini əhatə edir, tez-tez əks istiqamətlərdə və ya fərqli sürətlə hərəkət edirlər. Bu texnika, axtarış, optimallaşdırma və ya massivlərin səmərəli şəkildə manipulyasiyası ilə bağlı problemlərin həllində xüsusilə faydalıdır.
İki göstərici texnikasının necə işlədiyinə dair bir qısa izah:
Başlanğıc: İlk olaraq, iki göstərici, adətən, massiv və ya ardıcıllığın müxtəlif mövqelərində yerləşdirirsiniz.
Hərəkət: Göstəriciləri müəyyən şərtlərə əsasən iterativ olaraq hərəkət etdirirsiniz, ta ki, onlar görüşənə qədər və ya müəyyən bir şərtə çatana qədər. Göstəricilərin hərəkəti problem tələblərinə əsasən idarə oluna bilər. Məsələn, bir göstərici digərlərinə nisbətən daha sürətlə hərəkət edə bilər, ya da onlar əks istiqamətlərdə hərəkət edə bilərlər.
Şərtin yoxlanması: Hər iterasiya addımında, problem tələblərinə əsaslanan müəyyən şərtləri yoxlayırsınız. Bu şərtlər tez-tez göstəriciləri hərəkət etdirmək, bəzi dəyişənləri yeniləmək və ya digər əməliyyatları həyata keçirmək üçün qərar verir.
Tamamlanma: Bu proses, bir və ya iki göstərici massiv və ya ardıcıllığın sonuna çatana qədər davam edir, ya da başqa bir tamamlanma şərti yerinə yetirilənə qədər davam edir.
İki göstərici texnikası, xüsusi meyarlara uyğun olan cütləri və ya alt massivləri axtarma, optimal həll yollarını tapma və ya ardıcıllıqları səmərəli şəkildə manipulyasiya etməklə bağlı problemlərdə xüsusilə faydalıdır, iç içə döngələrdən istifadə etmədən. Bu, xeyli vaxt sərf etmədən, düz xətti və ya logaritmik zaman mürəkkəblik tələbləri olan problemlər üçün genellikle daha səmərəli bir həll təqdim edir.
Hüseyn və Yaroslav bir kart oyunu oynayır. Masanın üstündə ardıcıl düzülmüş kart var, hər birinin üzərində fərqli bir rəqəm yazılıb. Oyunçular növbə ilə oynayırlar. Hüseyn oyuna başlayır. Hər dövrdə oyunçu ya sol kənar, ya da sağ kənar kartı ala bilər. Oyunçu həmişə ən yüksək rəqəmi olan kartı seçəcək. Oyun, masada kart qalmadıqda sona çatır. Oyun sonunda Hüseyn və Yaroslavın topladığı kartların rəqəmlərinin cəmini tapın.
Giriş. İlk sətirdə masada n~(1 \le n \le 10000) kartın sayı var. İkinci sətirdə müsbət tam ədəd var, hər biri kartın üzərindəki rəqəmi göstərir. Bütün ədədlər 10^9-dan böyük deyil.
Çıxış. Oyun sonunda Hüseyn və Yaroslavın topladığı kartların rəqəmlərinin cəmini çap edin.
7
4 7 5 1 12 8 218 21Hüseyn kartı bir sıra düzülərək a_1, a_2, a_3, ..., a_n ilə düzür. Sonra onları toplayır və başqa bir ardıcıllıqla düzür: a_1, a_3, a_5, ..., a_6, a_4, a_2. Bu, Yaroslava verdiyi ardıcıllıqdır. Sizin işiniz, Yaroslavanın Hüseynin orijinal ardıcıllığını bərpa etməsinə kömək etməkdir.
Məsələn, əgər Yaroslava ardıcıllığı (2, 4, 9, 4, 7, 6) verilibsə, o zaman o, Hüseyinə (2, 6, 4, 7, 9, 4) ardıcıllığını qaytarmalıdır.
Giriş. İlk sətirdə bir tam ədəd n~(1 \le n \le 10000) var, kartların sayı. İkinci sətirdə müsbət tam ədəd var, kartların üzərindəki ədədlər. Bütün ədədlər 10^9-dan böyük deyil.
Çıxış. Hüseynin orijinal ardıcıllığını çap edin.
6
2 4 9 4 7 62 6 4 7 9 47
5 7 34 1 89 4 25 2 7 4 34 89 1Hüseynin və simvollarından ibarət bir stringi var. Özünü əyləndirmək üçün, o aşağıdakı oyunu düzəldib. Hüseyn stringə iki əməliyyatdan birini həyata keçirə bilər:
Sol ucuna , sağ ucuna əlavə etmək;
Sağ ucuna , sol ucuna əlavə etmək;
Məsələn, stringindən Hüseyn və ya ala bilər.
Siz, Hüseyinin bütün əməliyyatlardan sonra əldə etdiyi stringi verirsiniz (ola bilsin ki, o, heç bir əməliyyat etməyib). Stringin əvvəllər mümkün olan ən kiçik uzunluğunu təyin edin.
Giriş. Uzunluğu 10^5-dan çox olmayan, yalnız və simvollarından ibarət bir string verilir.
Çıxış. Hüseyinin əvvəlki stringinin mümkün olan ən kiçik uzunluğunu çap edin.
01010010810011101Verilmiş massiv , artan sırada düzülmüş tam ədəd var. -ə bərabər olan (A_i, A_j) cütünün olub olmadığını müəyyən edin, burada i < j.
Giriş. İlk sətirdə iki tam ədəd n~(n \le 10^5) və x~(x \le 10^6) var. İkinci sətirdə müsbət tam ədəd var, hər biri 10^6-dan böyük deyil.
Çıxış. Əgər belə bir cüt varsa "BƏLİ" yazın, əks halda "YOX" yazın.
10 13
1 3 5 6 8 10 11 11 11 16BƏLİ8 61
5 5 8 12 16 21 44 50YOXVerilmiş tam ədəd massivində ədədinə bərabər olan (A_i, A_j, A_k) ədədlərini tapın. Bütün indekslər i, j, k fərqli olmalıdır.
Giriş. İlk sətirdə massiv ölçüsü n~(n \le 3 \cdot 10^4) və x~(|x| \le 10^9) dəyəri var. İkinci sətirdə tam ədəd var, hər biri 10^8-dan böyük deyil.
Çıxış. Əgər tələb olunan üçlük varsa, onu istənilən sırada çap edin. Əgər bir neçə üçlük varsa, hər hansı birini çap edin. Əgər tələb olunan üçlük yoxdursa, çap edin.
8 19
20 3 5 1 15 7 17 121 3 15Verilmiş sıralanmış massivində tam ədəd var. Hər bir indeks üçün, A_i və 2 \cdot A_i arasında olan elementlərin sayını tapın, daxil olmaqla.
Giriş. İlk sətirdə massivinin ölçüsü n~(n \le 10^5) var. İkinci sətirdə tam ədəd, hər biri -dan 10^9-a qədər, sıralanmış olaraq var.
Çıxış. tam ədəd çap edin. Hər bir i~(1 \le i \le n) üçün, A_i və 2 \cdot A_i arasında, daxil olmaqla, olan elementlərin sayını çap edin.
10
1 2 3 4 5 6 7 8 9 102 3 4 5 6 5 4 3 2 1Gözəl Adriatik sahili boyunca otel var. Hər bir otelin qiyməti avro ilə ifadə edilir. Petr lotereyada avro qazandı. İndi o, bu ardıcıl otellərin cəminin mümkün olduğu qədər böyük olmasını istəyir, amma -i keçməməlidir.
Maksimal mümkün qiyməti hesablamağınız lazımdır.
Giriş. İlk sətirdə iki tam ədəd və m~(1 \le n \le 3 \cdot 10^5, 1 \le m < 2^{31}) var. Növbəti sətirdə müsbət tam ədəd var, sahil boyunca yerləşən otellərin qiymətləri.
Çıxış. İstənilən qiymətləri çap edin (bütün testlərdə 0-dan böyük olacaq).
5 12
2 1 3 4 512Verilmiş müsbət tam ədəd massivini, -ə bərabər olan alt massivlərin sayını tapın.
Giriş. İlk sətirdə massiv ölçüsü n~(1 \le n \le 2 \cdot 10^5) və hədəf cəmi x~(1 \le x \le 10^9). Növbəti sətirdə ədəd a_1, a_2, \ldots, a_n~(1 \le a_i \le 10^9) — massiv məzmunu.
Çıxış. Lazım olan alt massivlərin sayını çap edin.
5 7
2 4 1 2 73Ziya sabah ardıcıllıq müsabiqəsində iştirak edəcək. x \ge 0 ədədi, bir ardıcıllığın zirvəsi sayılır, əgər ardıcıllıq 1, 2, 3, ..., x - 1, x, x - 1, ..., 3, 2, 1 bu ardıcıllığın alt ardıcıllığıdır. Hər bir ardıcıllığın gücü onun ən böyük zirvəsi sayılır.
Sabah bütün tələbələr müsabiqəyə gedəcəklər və ən güclü ardıcıllığın qalibi olacaq. Ziya a_1, a_2, a_3, ..., a_n ardıcıllığına sahibdir. O, bu gün bütün ardıcıllıqlara üstünlük verərək daha güclü ardıcıllığı seçmək istəyir. Ancaq Ziya öz ardıcıllığının gücünü bilmir, lakin qalib olmaq istəyir. Ona kömək edin ki, öz ardıcıllığının gücünü hesablasın.
Giriş. İlk sətirdə Ziyanın ardıcıllığında olan ədədlərin sayı n~(1 \le n \le 10^5) var. Növbəti sətirdə tam ədəd a_i~(1 \le a_i \le 10^5) — ardıcıllığın elementləridir.
Çıxış. Bir ədəd çap edin — verilmiş ardıcıllığın gücüdür.
2
2 1003
1 2 315
1 10 2 3 12
Şərhlər5