Почему некоторые задания по алгоритмам и др. не очень формальные?

Никогда и ни от каких задачек в спортивном программировании не стоит ждать, что они будут сформулированы идеально, так, чтобы просто осталось их реализовать. Это задачки не учебные в классическом смысле, потому что в реальной работе, даже где хороший продуктивный процесс разработки, задания всегда будут нечёткие, неоднозначные, с явными упущениями, недоговорками и т. д., и очень важно уметь додумывать их самостоятельно. При этом отвлекать тимлида или сеньоров на разъяснение каждой строчки задания тоже нигде не приветствуется :)
В частности, во многих сервисах спортивного программирования задачки часто умышленно запутываются. Правильный процесс решения -- это не "закодить по готовой формальной постановке" (так и на работе редко бывает), а поэкспериментировать, получить обратную связь от тестов, найти решение через итерации, подумать побольше.

Причём вообще практически все серверы спортпрога отвечают только YES, NO и NO COMMENTS, у меня единственная наверное из всёх очень гуманная версия, показывает тесты и даёт хинты:)

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

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