Опыт проведения городской школьной олимпиады по программированию

В этой статье я расскажу про опыт проведения городской школьной олимпиады по программированию.

Идея организовать местную олимпиаду возникла ещё на стадии запуска детской школы программирования. За два года работы стало ещё более очевидно, что счёт идёт на единицы различных соревнований в этом направлении, а значит мало возможностей для проверки учеников, вовлечения вне занятий, дополнительной мотивации результатами. Скажу даже так: в Иркутске нет соревновательных мероприятий для учеников по программированию на scratch, и только одна олимпиада в которой могут участвовать питонисты - “Играем в программистов”.

Казалось, что организовать олимпиаду нужно много ресурсов: найти большое помещение, например договориться с крупной библиотекой, обеспечить техникой, найти преподавателей-волонтёров, обеспечить безопасность и море других мелочей. И это было некоторым камнем преткновения для частного небольшого учебного заведения в части ресурсов. Решение пришло неожиданно - дистанционная олимпиада! В феврале 2020 года пошли слухи про скорую удалёнку, что очные мероприятия запретят и для меня всё стало на свои места.

Теперь про организацию олимпиады:

Задания мы выложили в вконтакте в своей группе 20 марта 2020 года. Время для решения задач дали чуть больше недели - с 20 марта 2020 года по 29 марта 2020 года. Оценку работ планировали провести до 12 апреля 2020 года, даже сомневались не мало ли, но справились всего за 4 дня. При этом участников было чуть больше 100, проверка была ручная(но об этом попозже).

Участников поделили на три категории:

  • младшая ступень (до 7 класса общеобразовательных учреждений включительно, задачи решены на визуальном языке программирования scratch/snap)

  • средняя ступень (до 7 класса общеобразовательных учреждений включительно, задачи решены на любом разрешённом олимпиадой языке программирования)

  • старшая ступень (8-11 классы общеобразовательных учреждений, задачи решены на любом разрешённом олимпиадой языке программирования).

Что же это за такие разрешённые языки. Мы посоветовались с муниципальными коллегами, которые проводят уже больше 15 лет олимпиаду “Играем в программистов” и допустили следующий список:

Язык

Редактор

Компилятор

C++

Code: Blocks, VisualStudio

VisualStudio 2019

C#

Code: VisualStudio

VisualStudio 2019

Pascal

FreePascal 2.6.2

FreePascal 2.6.2

Basic

FreeBasic 0.90.1

FreeBasic 0.90.1

Java

NetBeans, Eclipse

JDK 1.7.0

Python

IDLE

Python 3.6

Учащимся предлагались задания с указанием максимального количества баллов за каждую задачу и примерными тестами к ней. Решения заданий олимпиады должны были предоставить в виде исходного кода на языке программирования. Ничего необычного. Главное - обозначить как правильно называть имена файлов, по опыту преподавания - дети любят творческие названия проектов. Мы прописали в положении к олимпиаде такое правило: Имя файла даётся по следующему принципу: до 5 символов – название учебного заведения с указанием территории, 2 символа – инициалы участника и последний символ – номер задачи. В имени файла можно использовать только латинские буквы и цифры, первый символ – буква. В основном все следовали указаниям. Когда проверяешь сотни работ, у каждого одни задачи решены, другие нет - соблюдение данного пункта очень экономит время на проверке.

На каждую задачу делали по 5 тестов, за каждый пройденный тест начисляли по 2 балла. Разрешили предоставление дополнительных решений задач. За каждое дополнительное решение начисляли 5 баллов при условии, что и основное решение и дополнительное успешно прошли все тесты. Дополнительное решение должно существенно отличается по методу решения задачи. Сделали это для подстраховки, если будут ученики, решившие все задачи и набравшие максимальные баллы. Спойлер - такого не случилось. Отчасти потому что задачи были составлены не одного уровня, а от совсем простых до очень-очень сложных.

Теперь приведём сами задачки и наши варианты решений, которые мы публиковали для учеников своей школы в рамках их образовательной программы вместе с разбором решений.

Разборы решений, ниже под спойлерами сами задачи и код на python

Задача 1

Через ввод с клавиатуры задаётся количество чисел. Затем сами числа передаются через ввод пользователя с клавиатуры и заносятся в готовый пустой список. Составить программу, подсчитывающую среднее арифметическое. Результат записывается в переменную. Визуально(scratch/snap) – на экране отображается результат любым способом (например, функция говорить/думать). Текстовое (python) – результат выводится в консоль на экран.

Примерный тест:

Входные данные:

Выходные данные:

5

1 2 3 4 5

 3

Решение 1
a = int(input("Количество чисел:"))
y = 0
for i in range(a):
    x = float(input("Число:"))
    y += x
y = y / a
print("Среднее арифметическое: " + str(y))

Задача 2

У Кота, Пса и Птицы имеется по некоторому количеству грибов (у всех по разному количеству).  Данные по количеству передаются через ввод пользователя с клавиатуры и заносятся в готовый пустой список, где первый элемент - грибы Кота, второй элемент -  грибы Пса, третий элемент - грибы Птицы.

Составить программу, определяющую, у кого из них наибольшее количество. Результат записывается в переменную. Визуально (scratch/snap) – на экране появляется персонаж с наибольшим количеством грибов и говорит (функция говорить/думать)) количество грибов. Текстовое (python) – имя персонажа выводится в консоль на экран.

Примерный тест:

Входные данные

10 30 20

20 10 30

Выходные данные

Пёс

Птица

Решение 2
s = []
for i in range(3):
    griby = int(input())
    s.append(griby)
if s[0]>s[1] and s[0]>s[2]:
    print("Кот")
elif s[1]>s[2]:
    print("Пёс")
else:
    print("Птица")

Задача 3

Через ввод с клавиатуры задаётся количество девочек, у которых было по некоторому количеству яблок. Данные по количеству передаются в готовый пустой список. Каждая девочка съела по стольку яблок, каков её порядковый номер.

Составить программу для определения у кого сколько осталось яблок. Результат записывается в список. Визуально (scratch/snap) – на экране отображаются пять девочек (обязательно использование клонов) и говорят (функция говорить/думать) количество яблок. Текстовое (python) – количество яблок выводятся в консоль на экран. По каждой девочке? По порядку отдельной строкой.

Примерный тест:

Входные данные:

Выходные данные:

5

10 20 30 40 50

 9

18

27

36

45

Решение 3
girls = int(input())
apple = []
for numgirl in range(1, girls + 1):
    a = int(input())
    a = a - numgirl
    apple.append(a)
for numgirl in range(girls):
    print(apple[numgirl])

Задача 4

День недели задаётся через ввод пользователя с клавиатуры числом от 1 до 7. Составить программу, в которой визуально (scratch/snap) – на экране отображается название этого дня любым способом (например, функция говорить/думать). Текстовое (python) – название дня выводится в консоль на экран.

Примерный тест:

Входные данные

1

3

Выходные данные

Понедельник

Среда

Решение 4
days = ['Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье']
day = int(input())
print(days[day - 1])

Задача 5

Через ввод с клавиатуры задаётся количество чисел. Затем сами числа передаются через ввод пользователя с клавиатуры и заносятся в готовый пустой список. Сделать программу, изменяющую элементы списка, числа кратные 5 заменять на 2 (умноженную на кратность заменяемого числа), а числа кратные 2 заменять на 5 (умноженную на кратность заменяемого числа). Числа передаются в готовый пустой список. Результат записывается в список. Визуально (scratch/snap) – на экране отображаются все элементы списка любым способом (например, функция говорить/думать). Текстовое (python) – элементы списка выводится в консоль на экран в одну строку.

Примерный тест:

Входные данные:

Выходные данные:

6

10 2 6 20 4 5

4 5 15 8 10 2

Решение 5
nums = int(input())
listnums = []
for i in range(nums):
    listnums.append(int(input()))
for i in range(nums):
    if listnums[i] % 5 == 0:
        listnums[i] = listnums[i] // 5 * 2
    elif listnums[i] % 2 == 0:
        listnums[i] = listnums[i] // 2 * 5
    print(listnums[i])

Задача 6

Условие этой задачи очень простое: вам всего лишь надо определить, сколько клеток находится под боем шахматного коня, одиноко стоящего на шахматной доске. На всякий случай напомним, что конь ходит буквой «Г» — на две клетки по горизонтали или вертикали в любом направлении, и потом на одну клетку в направлении, перпендикулярном первоначальному. Программа получает на вход через вводы пользователя с клавиатуры два числа от 1 до 8 каждое, задающие номер столбца и номер строки, обозначающие позицию коня на шахматной доске. Визуально (scratch/snap) – на экране отображаются любым способом (например, функция говорить/думать) количество клеток шахматной доски, находящихся под боем коня. Текстовое (python) – количество клеток шахматной доски, находящихся под боем коня выводится в консоль на экран.

Примерный тест:

Входные данные:

Выходные данные:

1 5

4

8 1

2

Решение 6
vozmojnost = 0
stolb = int(input())
stroka = int(input())
# Конь ходит вправо
if stolb + 2 < 9:
    if stroka + 1 < 9: # и вверх
        vozmojnost += 1 
    if stroka - 1 > 0: # и вниз
        vozmojnost += 1 
# Конь ходит влево        
if stolb - 2 > 0:
    if stroka + 1 < 9: # и вверх
        vozmojnost += 1 
    if stroka - 1 > 0: # и вниз
        vozmojnost += 1 
# Конь ходит вверх        
if stroka + 2 < 9:
    if stolb + 1 < 9: # и вправо
        vozmojnost += 1
    if stolb - 1 > 0:# и влево
        vozmojnost += 1
# Конь ходит вниз        
if stroka - 2 > 0:
    if stolb + 1 < 9:# и вправо
        vozmojnost += 1
    if stolb - 1 > 0:# и влево
        vozmojnost += 1        
print(vozmojnost)

Задача 7

Заданы две клетки шахматной доски. Если они покрашены в один цвет, то выведите слово YES, а если в разные цвета — то NO. Программа получает на вход через вводы пользователя с клавиатуры четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Визуально (scratch/snap) – на экране отображаются любым способом (например, функция говорить/думать) YES или NO. Текстовое (python) – выведите YES или NO в консоль на экран.

Примерный тест:

Входные данные:

Выходные данные:

1 1 2 6

YES

Решение 7
summ = 0
for i in range(4):
    summ += int(input())
if summ % 2 ==0:
    print('YES')
else:
    print('NO')

Задача 8

На ипподроме наметилось городское соревнование. Но никто не знает сколько будет участников. Места всем хватит, но есть проблема с расширением стартового загона. Представьте загон в виде квадратной таблицы. Участника номер один необходимо ставить в правом верхнем (переднем) углу, далее участников ставят по диагоналям сверху вниз, последний участник стоит в левом нижнем углу. Чтобы быстро сделать расстановку необходимо вывести на табло данную таблицу. Организатор в последний момент сообщит Вам только количество участников (программа получает на вход через ввод пользователя с клавиатуры одно число).

Визуально (scratch/snap) – на экране рисуется таблица, в каждой ячейке вместо обычных чисел используйте точки, какое число – столько сгруппированных точек в ячейке. Текстовое (python) – вывести в консоль на экран таблицу с числовой расстановкой.

Примерный тест:

Входные данные:

Выходные данные текстовое:

9

4 2 1

7 5 3

9 8 6

Решение 8
vvod = int(input())
num = vvod ** 0.5
if int(num) != num:
    num = int(num) + 1
else:
    num = int(num)
table = [[0] * num for i in range(num)]
numb = 0
ivert = num
for i in range(num):
    if ivert > 0:
        igoriz = 0
        for i in range(num - ivert + 1):
            if igoriz <= num - ivert:
                numb += 1
                if numb <= vvod:
                    table[igoriz][ivert + igoriz - 1] = numb
                else:
                    table[igoriz][ivert + igoriz - 1] = 0
            igoriz += 1
    ivert -= 1  
ivert = 1            
for i in range(num - 1):
    if ivert < num:
        igoriz = 0
        for i in range(num - ivert):
            if igoriz < num - ivert:
                numb += 1
                if numb <= vvod:
                    table[ivert + igoriz][igoriz] = numb
                else:
                    table[ivert + igoriz][igoriz] = 0
            igoriz += 1
    ivert += 1
for row in table:
    for elem in row:
        print(elem, end=' ')
    print()

Задача 9

В наш город приехал чудо-зоопарк с множеством зверей. Одних только пингвинов 3 вида, 4 вида черепах, 5 видов акул и т.д. Вы весь день записывали названия животных в блокнот, а вечером решили подсчитать каких животных (не разделяя на виды) было больше всего. Сколько в блокноте всего животных неизвестно, но точно понятно, что каких-то животных больше и что сначала записано животное, а затем его вид, например, «Penguin Emperor». В каждой из следующих строк блокнота записано по одному виду животного. На вход подаётся файл input.txt с данными. Для scratch/snap в программе необходим пустой список для ручного импорта в него файла. Визуально (scratch/snap) – на экране отображаются любым способом (например, функция говорить/думать) название животного и их количество. Текстовое (python) – в консоль на экран в одну строку выводится название животного и их количество.

Примерный тест:

Входные данные:

Выходные данные:

Penguin Emperor

Shark zebra

Turtle Caiman

Shark white

Shark 2

Решение 9
file = open("input.txt")
animal=[]
kolvo=[]
for stroka in file:
    data = stroka.split()
    animal.append(data[0])
for i in animal:
    kolvo.append(animal.count(i))
maxi = 0
pos = 0
for i in range(len(kolvo)):
    if kolvo[i] > maxi:
        maxi = kolvo[i]
        pos = i
print(animal[i], maxi, end=" ")

Задача 10

Поговаривают, что сейчас самая популярная игра у школьников - brawl stars. Ты наверняка чемпион и прокачал множество персонажей. Близится соревнование и поэтому надо разбить персонажей на две равные команды. У вас есть несколько персонажей известного уровня w1, …, wn. Напишите программу, которая распределит персонажей в две команды так, что разность суммы уровней этих двух команд будет минимальной. Ввод содержит уровни персонажей w1, …, wn (1 ≤ wi ≤ 100) через пробел с именами персонажей. На вход подаётся файл input.txt с данными. Для scratch/snap в программе необходим пустой список для ручного импорта в него файла

Ваша программа должна вывести имена персонажей первой команды, затем одно число — минимальную разность уровней двух команд. Затем имена персонажей второй команды.

Визуально (scratch/snap) – вывод последовательно заносится в список. Текстовое (python) – ответ выводится в консоль на экран отдельными строками.

Примерный тест:

Входные данные:

Выходные данные

4 Shelly

7 Bull

10 Bo

12 8-bit

15 ElPrimo

20 Tick

Tick

Bo

Shelly

0

ElPrimo

8-bit

Bull

Решение 10
file = open("input.txt")
pers_dict = []
for pers in file:
    data = pers.split()
    pers_dict.append((data[1], int(data[0])))
pers_dict.sort(key = lambda elem: elem[1], reverse = True)               
command1 = []
command2 = []
summa1=0
summa2=0
for elem in pers_dict:
    if summa1 <= summa2:
        command1.append(elem)
        summa1 += elem[1]
    else:
        command2.append(elem)
        summa2 += elem[1]
for key in command1:
    print(key[0])     
if summa1> summa2:
    print(summa1-summa2)
else:
    print(summa2-summa1)
for key in command2:
    print(key[0])

Какими выводами хотелось бы поделиться по итогам:

  • Организовать городскую олимпиаду просто, сделайте её дистанционной, не переживайте за гугление участниками, разработайте свои задачи и тогда нагуглить решение будет в разы сложнее, чем решить.

  • Финансирование олимпиады - дело минимальное, берите пример с Роббо, они Российскую олимпиаду по scratch проводят мега бюджетно - электронные дипломы и сертификаты участника с факсимиле организатора, но сути это не меняет - красивая электронная "бумажка" в наличии.

  • Не нужно придумывать автоматизированную проверку, не так страшно ручное тестирование решений. Главное заранее подготовьте тесты.

  • Думаете будет мало участников? Разошлите электронные письма в школы города. Всегда найдётся педагоги, которые очень заинтересованы в таких мероприятиях.

  • Наша олимпиада оказалась очень сложной для школьников всех возрастов, хотя я переживал об обратном. Реально полезной оказалась градация задач по сложности. Задачи 8-10 можно смело забыть, вместо них мы решили в будущем добавить 6 простых задач, схожих по уровню с 4 задачей.

Я очень надеюсь, что статья будет полезной руководителям кружков программирования и педагогам. Смело проводите местные олимпиады, смотрите решения ваших учеников, делайте выводы для улучшения своей образовательной программы.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 56

    +10
    Последняя задача вроде просто неверно решена, отсутствует доказательство оптимальности решения, сортировка по убыванию, даёт неплохое решение подобных задач, но не всегда лучшее.
    Дан например список 11, 10,7,7,7,
    получится по приведенному алгоритму:
    11,7 — в первой группе и 10,7,7 — во второй. Хотя, верным будет 11 ,10 в первой группе и 7,7,7 во второй
    Бедные дети
    Для равных по кол-ву команд, все равно неверно, например список 11,10,7,7,7,1: алгоритм выдаст 11,7, 1и 10 ,7,7 хотя верно 11,10,1 и 7,7,7
    А так да видимо она оказалась сложной не для школьников, а для организаторов.
      –5
      Жадный алгоритм относительно просто базовое решение, которое можно втолковывать школьникам и не отбить у них желание заниматься. Я видеоразбор давно записывал, точно не помню, но кажется упоминал, что предлагаемое решение обеспечивает приемлемый уровень оптимальности при так скажем трудозатратах на написание решения.
      А вообще мы бы приняли даже менее оптимальные решения, лишь бы участники приложили усилия.
        +6
        Задачи раскроя — это NP задачи. А формулировать задачи нужно корректно.
        В данном случае нужно было упомянуть в условии субоптимальность возможного решения
          0
          Вот кстати про очень важный момент говорите — формулировка условий задач — реально важный момент, посмотреть на составленные задачи сторонним взглядом ученика, а не педагога, совсем непросто и надо держать с участниками олимпиады оперативную связь, чтобы отвечать на вопросы, давать пояснения.
          Мы так делали — было полезно.
            +3
            Я прочитал условия некоторых задач. Ощущение что брали иностранные задачи и переводили гуглом.
            Приходится по 2-3 раза перечитывать чтобы точно понять суть.
            Точно их нельзя нормально переформулировать для детей?
          +7
          Не показывать детям оптимального решения — это очень плохая практика.
          Лучше посмотрите, как готовят задачи ко ВСоШ по информатике: там для каждой подзадачи (ну почти) есть отдельное решение с его доказательством.
            +5
            Ещё хуже, когда проверяющие студенты не принимают верного решения, потому что видят неверное референсное. У меня такое было.
              0
              Опять же, автоматизированные тесты — наше все.
                0
                Соглашусь, но с точки зрения организатора — есть ли на это время и трудоресурсы. Как пример организаторы олимпиады “Играем в программистов” про которую я упоминаю в статье, только в этом году(а проводят её очень-очень давно) нашли время на автотесты. Потому что реально не хватает сил, времени и людей на этот момент, когда речь идёт об организации местного уровня. И то добрались до автотестов потому что наконец-то, впервые за чуть ли не 15 лет, один из ВУЗов стал соорганизатором.
                А вот по scratch всё равно ручная проверка и никак больше…
                  +2

                  Зачем это делать самому? Есть готовые платформы, такие как codility

                    0
                    Вы серьёзно?
                    Платная рекрутинговая платформа для проведения некоммерческой местной школьной олимпиады?
                    +3

                    Я как-то один раз писал олимпиаду по информатике в школе, там исходные данные надо было брать из файла и ответ записывать тоже в файл. Автотесты на такое пишутся тривиально: десяток готовых наборов данных(включая всякие граничные случаи) и ответов. Есть конечно вероятность, что какое-то неверное решение пройдёт все тесты, но она очень маленькая.


                    Если не умеют работать с файлами — можно дать куски готового кода.


                    Правда не знаю, может ли работать с файлами scratch.

                      0
                      Стандартный ввод-вывод тоже часто используется в автотестах, особо разницы нет, что использовать, как удобнее.
                        0
                        В Scrtatch или Snap можно импортировать только списки, таким образом давать через файл входные данные, что довольно полезно в части предварительной подготовки к переходу обучения на тот же pytthon, но выходные экпортить автоматом никак, причём там не всегда возможен(отчасти, что это сложнее для ребёнка) текстовый результат, чаще визуальный.
                        Меня честно говоря оттолкнула от автотестов история коллег муниципалов, которые для своей олимпиады сделали десятки наборов данных на каждую задачу)) Это круто, но показалось, что будет очень трудозатратно.
                  0
                  Да это действительно отличный пример и предварительная подготовка решения с доказательством очень поможет, особенно когда проверкой решений занимается много разных людей.
              0
              Главная проблема дистанционного проведения подобных олимпиад — это то, что участник может нагуглить алгоритмы, необходимые для решения задач, либо попросить помощи.
                0
                Мы так и переживали, решая проводить в таком формате или нет, но в жизни немного иначе оказалось. Я делюсь как это по факту вышло, вообще даже на той же дистанционнной скретч олимпиаде Роббо, три года уже смотрю победившие проекты, судя по ним — помощь детям оказывают так себе.
                Я точно знаю, что ученики моей же школы пытались гуглить, искать похожие задачи, но что-то не смогли совсем. Не умеют школьники гуглить алгоритмы видимо.
                  +3
                  Чтобы гуглить, нужно знать, что гуглить. А если знаешь что, то и гуглить не надо.
                    0
                    Вот и я также подумал и не прогадал)) Тем более, если задачи описывать по-своему, а не брать готовые чужие, у которых решений тьма выложена, то даже найти похожую трудно будет.
                      +1

                      Знание алгоритмов — хорошо, а знание алгоритмов + доступ к e-maxx (или что там сейчас популярное) — лучше :)

                      +1

                      Это у вас или не попались, или не спалились с вариантом "папа/мама программист" :-)

                    +4

                    У вас ошибка в решении 10 задачи.
                    И она просто на порядок сложнее всех остальных. Решение 10 сложнее чем всех остальных вместе взятых. И вообще Dp школьникам явно рано.

                      –3
                      Самая сложна это 8 задача. Но, да, вы правы, задачи 8-10 оказались непосильными.
                      А решение жадным алгоритмом не является ошибкой. Это приближенный быстрый метод решения задачи NP-задачи. Мы рассказывали решение в контексте проходимой с учениками темы, не углубляясь в дебри точных решений, которые кстати неприменимы для рюкзаков, так скажем: больших размеров.
                        +6
                        Лучше пропустить материал к которому не готовы, чем научить неправильным вещам. Переучиваться сложнее.
                          +4
                          Лучше пропустить материал к которому не готовы, чем научить неправильным вещам

                          научить неправильным вещам

                          Ехидный комментарий про "griby", "vozmojnost", "stolb", "stroka", "vvod", "kolvo", "summa1", "summa2"

                          +11
                          Вы в ответах даете неверное решение. В условиях нет ни слова не про приближение.
                          Правильное решение безумно сложно для школьника. Вы сами попробуйте его написать понятным языком. И понятным кодом. Все сразу сами поймете.

                          Вы обманываете детей. Так нельзя делать. Никогда.

                          8 — непонятные условия. Я 3 раза перечитал. Посмотрел ответ и все равно не понял что надо делать.
                          10 — все понятно. Но dp. Для школьников нерешаемо. И неверный ответ от организаторов сверху.
                          И то и то демотивирует и ставит огранизаторов на роль неких шутов. Которые хотят чтобы ответ подогнали под их понимание правильности. Или разобрались а что же они хотели сказать этим вопросом.

                          Не выдумавайте сами. Берите условия с любых проверенных олимпиад. Там все четко и без нерешаемых задач люди сделали.
                            +1
                            Восьмая задача — заполнение квадратной матрицы зигзагом начиная с верхнего правого угла. По примеру понятно, а сформулировано коряво, но задача несложная. Примерно как здесь:
                            www.mathworks.com/matlabcentral/fileexchange/56332-zigzag-scan-any-n-n-matrix-bloc-of-image
                            Десятая задача — элементарная и легко решается полным перебором. Порядок сложности -факториал.
                            Вот её оптимизации — очень нетривиальны. И не для школьников.
                              +3
                              8 — перечитал еще раз. Посмотрел ответ. Понял. Не зигзагом там. Там наискосок надо квадрат заполнить. Так формулировать задачи нельзя.

                              К факториалу претензий по сути нет. Хотя все равно слишком сложно по сравнению с остальными. Тогда надо зарубать все решения сделанные по другому. И обязательно нужно примечание в задаче. «Супер сложно. Не беритесь пока все остальное не сделали.» Для отделения первого места от второго может пригодится.

                              Претензия к 10 это неверный ответ организатора. Участник должен угадать что у организатора в голове. Не надо решать верно, надо просто угадать о чем думал тот кто это придумывал. Так делать нельзя. Это дискредитирует всю идею олимпиад по программированию.
                                0
                                Ну я хотел поправиться — это скан называется. Только диагональный.
                                А с неверным ответом на 10, вы когда пишете, сначала читайте комментарии. Уже в первом комментарии написано, что решение неверное. А так я с Вами полностью согласен.
                                И кстати, если было в условии сказано, что решить нужно полным перебором, то задача была бы как раз для школьников.
                                  0
                                  Да, сорри. Писал раньше чем читал.
                                    0
                                    Да не, все нормально, просто мы с вами полностью повторили претензии к автору. И я согласен, что задачи нужно брать проверенные. Впрочем мне и в учебнике попадались неверно решённые задачи. Особенно по статистике и теории вероятностей.
                                      +1
                                      Мне тоже. И на олимпиадах в детстве мне такие же организаторы попадались. Во времена тервера я уже философски к такому относился. А вот в школе обидно было.
                                        +1
                                        Да, это точно. Было очень обидно.
                                +1

                                Там будет 100!/(50!*50!) при максимальном числе участников. Ради интереса залез в wolfram alpha — это порядка 10^29. На процессоре частотой 1 GHz — 10^20 секунд или 10^12 лет. Я бы это не считал решением.

                                  +3
                                  Формально говоря это все равно верное решение. Время то ограничено не было. Другое дело, что тут явный прокол организаторов.
                                    0
                                    Формально, максимум участников там неизвестен: (1 ≤ wi ≤ 100) это уровни персонажа. Но решения там, там конечно нет.
                                      0

                                      Опс, и правда это уровни, а не макс. количество.

                                        +2
                                        Вот она geeksforgeeks Даже условие у автора задано почти корректно.
                                          0
                                          Спасибо за метод, я его упустил. Числа то небольшие целые.
                                +6

                                проблема давать сложную задачу но принимать приближенное решение (без указания) в том что более умный школьник, который сможет понять неоптимальность решения, может потратить много лишнего времени или вообще не предоставить решения.

                                  +6
                                  А потом расстроиться что менее умный школьник сделал попроще и выиграл. Хотя тот кто выиграл даже не понял что он дал неверный ответ.

                                  Нельзя так делать. Нельзя обманывать детей. Тем более что есть выверенные задачки, с верными и доступными школьникам решениями. Надо просто взять их.
                              –1

                              А почему такая старая версия java? Даже не восьмая. И не хватает IDE от jetbrains что для java, что для пайтона.

                                +2
                                Хороший вопрос без stream api и лямбд тяжело.
                                Версию компилятора C++ и C# вообще не указали (msvc/dmsc).
                                +4

                                В олимпиадах по программированию отличительной чертой (по сравнению с другими предметами) всегда являлась объективность оценивания: тест либо пройден либо нет, никакого субъективизма от жюри тут нет. У вас же, как я понял, совсем не такая система...

                                  0
                                  Да вроде нет, к каждой задаче было по 5 тестов, всё чётко — программа прошла тесты или нет.

                                  Отдельно по 10 задаче мы планировали смотреть подробно решение, если оно не будет проходить тесты, но алгоритм будет давать значения приближенные к оптимальным.
                                  Но смотреть было нечего, потому что никто 8-10 задачи не решил.
                                  +1

                                  Не вникая в задачи как таковые, хочу поддержать автора в его начинании. Приятно смотреть на завершенную работу

                                    0
                                    Спасибо на добром слове!
                                    +1
                                    только одна олимпиада в которой могут участвовать питонисты — “Играем в программистов”


                                    Очень странное утверждение, а как же Всероссийская олимпиада школьников? В Иркутске её не проводят?
                                      +3

                                      Подтверждаю, Всероссийская олимпиада школьников проводится в Иркутской Области и там можно использовать Python.

                                        0
                                        Я именно про местные олимпиады говорю, тем паче, что на Всерос в школах жёсткий отбор, так как школам выставляют лимиты на количество участников. Примерно так: от обычной СОШ на районный этап могут пройти 1-2 ученика, от лицея/гимназии 4-5 учеников.
                                        Плюс — только 5-11 классы.
                                        +1
                                        VisualStudio 2019

                                        Вот так детей и подсаживают на проприетарщину

                                          +1
                                          Вы специально включили в статью код картинками, чтобы хитрому ученику потом было сложнее нагуглить или скопипастить решение, а осилив это задание, потом обнаружить, что среди них есть тупо неправильные? Или же таков был уровень подготовки к низкобюджетной олимпиаде?
                                          Заголовок спойлера
                                          Задача 9
                                          file = open('input.txt')
                                          animal = []
                                          kolvo = []
                                          for stroka in file:
                                              data = stroka.split()
                                              animal.append(data[0])
                                          
                                          for i in animal:
                                              kolvo.append(animal.count(i))
                                          
                                          maxi = 0
                                          pos = 0
                                          for i in range(len(kolvo)):
                                              if kolvo[i] > maxi:
                                                  maxi = kolvo[i]
                                                  pos = i
                                          print (animal[i], maxi, end=" ")

                                          $ cat input.txt 
                                          Shark White
                                          Shark White
                                          Turtle Caiman
                                          Shark zebra
                                          Turtle Caiman

                                          $ python a.py 
                                          Turtle 3 


                                            +1
                                            А он разве картинками?
                                            У меня текстом показывается


                                            А в коде да, ошибка. Последняя строка должна быть
                                            print (animal[pos], maxi, end=" ")
                                            0
                                            Автоматичекую проверку решений сделать достаточно просто.
                                            Для подготовки задач можно использовать Полигон polygon.codeforces.com, а для проведения соревнований — ЯндексКонтест contest.yandex.ru
                                            Если интересно — пишите, поделюсь опытом.
                                              0
                                              Спасибо за совет, и сам посмотрю на будущее и надеюсь кому поможет!
                                              0
                                              Мне интересно, почему сишные компиляторы ограничены платформой windows?
                                              Вы не представляете, сколько школьников интересующихся IT вообще и программированием в частности тусуется в телеграм чатах linux направленности. У них и винды-то, зачастую, вообще нет.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое