--- tags: Python Advanced --- # [Призовий святковий турнір](https://kit.dots.org.ua/contests?id=1313) Для входа на сайт https://kit.dots.org.ua используйте логин и пароль, выданные преподавателем. :::spoiler Группа PyA 2020 LOGIN|PASSWORD|ФИО -|-|- u18368_SDBYL|4AXHPLEP|Афанасенков Артем u18369_YEWHK|92E6X9H4|Базалей Вадим u18370_GBXLH|7DEMXZCX|Белевцов Сергей u18371_HXXNC|K6H32QCF|Бондарь Вячеслав u18372_WKRTX|PCD9DMT2|Григоращенко Полина u18373_WGTHA|X2561WPY|Давыденко Глеб u18374_LTRZU|E9432YXY|Заднепрянский Михаил u18375_BDNGW|XW37FNM9|Зыбенко Сергей u18376_TCSGA|EAW3H9PY|Крохмаль Станислав u18377_NUPDE|1X1MCHFF|Макаров Михаил u18378_NSBNY|MB53CE9W|Юрченко Кирилл u18379_MFEHB|NYA1QCH7|Скриниченко Денис ::: ## Шаблон программы ```python= import sys sys.stdin = open('input.txt', 'r') sys.stdout = open('output.txt', 'w') # Ввод, если два числа и более в одну строку (a, b) = [int(s) for s in input().split()] # Решение задачи ``` ## [Задача A: Длина подстроки](https://kit.dots.org.ua/problems?id=2501) ![](https://i.imgur.com/Xb5G6yZ.png) :::spoiler Решение ``` если i > j: то вывести ноль иначе: вывести длину и сам срез ``` ![](https://i.imgur.com/fIdXrM1.png) <!-- ```python= s = input() (i, j) = [int(i) - 1 for i in input().split()] if i > j: print(0) else: print(j - i + 1) print(s[i:j+1]) ``` --> ::: ## [Задача B: Префиксы](https://kit.dots.org.ua/problems?id=2502) ![](https://i.imgur.com/fPH3hbH.png) :::spoiler Решение ``` если i > j: то вывести один (префикс из пустой строки) иначе: вывести количество префиксов вывести собственные префиксы в цикле ``` ![](https://i.imgur.com/vr5rBce.png) <!-- ```python= s = input() (i, j) = [int(i) - 1 for i in input().split()] if i > j: print(1) else: print(j - i + 2) for k in range(j-i): print(s[i:i+k+1]) ``` --> ::: ## [Задача C: Суффиксы](https://kit.dots.org.ua/problems?id=2503) ![](https://i.imgur.com/8CFFM80.png) :::spoiler Решение ``` если i > j: то вывести один (суфикс из пустой строки) иначе: вывести количество суфиксов вывести собственные суфиксы в цикле ``` ![](https://i.imgur.com/wGEDFgC.png) <!-- ```python= s = input() (i, j) = [int(i) - 1 for i in input().split()] if i > j: print(1) else: print(j - i + 2) for k in range(j-i, 0, -1): print(s[j-k+1:j+1]) ``` --> ::: ## [Задача D: Образец и текст](https://kit.dots.org.ua/problems?id=2504) ![](https://i.imgur.com/LzLXsXd.png) :::spoiler Решение ``` если строка p входит в t с позиции k: вывести YES и длину p иначе: вывести NO определить количество (совпавших символов p и t) + 1 ``` ![](https://i.imgur.com/K3QsmI2.png) <!-- ```python= p = input() t = input() k = int(input()) - 1 if p == t[k : k + len(p)]: print('YES') print(len(p)) else: print('NO') i = 1 while p[i-1] == t[k + i - 1]: i += 1 print(i) ``` --> ::: ## [Задача E: Наивный алгоритм (первое вхождение)](https://kit.dots.org.ua/problems?id=2505) ![](https://i.imgur.com/pFEy7Ey.png) :::spoiler Решение ``` присваиваем k = 0 цикл пока k меньше или равно разности между длиной t и p: выполнить срез начиная с позиции k длиной p если срез совпадает с p вывести p break иначе: каждый символ p: вывести символ если символ p не совпадает с символом среза: break увеличить k если k больше разности между длиной t и p: вывести 0 с новой строки иначе: вывести k+1 с новой строки ``` ![](https://i.imgur.com/ebPYvBB.png) <!-- ```python= p = input() t = input() k = 0 while k <= (len(t) - len(p)): s = t[k : k + len(p)] if p == s: print(p, end='') break else: for j in range(len(p)): print(p[j], end='') if p[j] != s[j]: break k += 1 if k > (len(t) - len(p)): print('\n0') else: print('\n' + str(k+1)) ``` --> ::: ## [Задача F: Наивный алгоритм - 2 (первое вхождение)](https://kit.dots.org.ua/problems?id=2506) ![](https://i.imgur.com/1E5Acsz.png) :::spoiler Решение ``` присваиваем k = 0 цикл пока k меньше или равно разности между длиной t и p: выполнить срез начиная с позиции k длиной p если срез совпадает с p вывести p справа налево break иначе: каждый символ p справа налево: вывести символ если символ p не совпадает с символом среза: break увеличить k если k больше разности между длиной t и p: вывести 0 с новой строки иначе: вывести k+1 с новой строки ``` <!-- ```python= p = input() t = input() k = 0 while k <= (len(t) - len(p)): s = t[k : k + len(p)] if p == s: print(p[::-1], end='') break else: for j in range(len(p)-1, -1, -1): print(p[j], end='') if p[j] != s[j]: break k += 1 if k > (len(t) - len(p)): print('\n0') else: print('\n' + str(k+1)) ``` --> ::: ## [Задача G: Наивный алгоритм (все вхождения)](https://kit.dots.org.ua/problems?id=2507) ![](https://i.imgur.com/2Pa9ayn.png)