---
# System prepended metadata

title: '[Призовий святковий турнір](https://kit.dots.org.ua/contests?id=1313)'
tags: [Python Advanced]

---

---
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)
