программированию. Ботаю алгоритмы, более-менее их понимаю, могу написать, если попросят, но есть проблема. На олимпиадах нет задачи просто написать алгоритм, как в книжке. Там целый сюжет. Я не понимаю, как решать эти задачи. Как мне научиться видеть смысл задачи и понимать, какой алгоритм требуется?
Нарешивать задачи
Формально опиши, что требуется в задаче.
https://codeforces.com/blog/entry/62730
Есть такая штука, как уровни таксономии Блума. У меня в школе были девочки-отличницы, которые писали отличные конспекты (ручками трёх разных цветов!), зубрили и рассказывали что просто от зубов отскакивало, но ничего не понимали из того, что рассказывают. Это один из самых низких уровней таксономии Блума. Даже пересказ своими словами и то лучше. Чтобы перейти на более высокий уровень нужна практика. https://www.youtube.com/watch?v=y7169jEvb-Y&t=106s При этом важно идти постепено от простых примеров к более сложным. Нельзя так просто взять и после изучения базового алгоритма на какую-то тему1 и второго базового алгоритма из темы2 взять и сразу решить сложную задачу в которой оба базовых алгоритма будут соединены в общее целое. Сначала нужно набить руку на каком-то определённом сорте задачек. Допустим взяли тему binary search - и решите пару десятков задач. И только после этого вам получится решать задачи которые на эту тему попадутся на олимпиадах. Т.е. вот это стремление сразу ухнуть в competetive programming без должной тренировки -- это только получать синяки и душевные травмы. Ведь вам же понятно, что новичков в спортзале не заставляют сразу жать штангу в сто кило, а ставят технику на пустом грифе, почему с программированием очень хочется надорваться? Если очень хочется войти в тему - окей, вот пара ссылок, вам хватит на много месяцев вперёд: https://drive.google.com/file/d/1TSX395WuwyjzcchvLgSo4vhj_FQflMpi/view https://codeforces.com/blog/entry/53341?f0a28=1 И не льстите себе, начните с atcoder и codechef - пока не будет стабильно выходить решить задачи A и B вам не стоит пытаться выбираться не в свою весовую категорию.
И еще самое главное - когда ты что-то пытаешься учить не пропускай материал с мыслями о том, что ты плюс-минус этот материал понимаешься, в большинстве случаев ты просто не понимаешь этот материал и обманываешь самого себя. Это нормально, таким образом мозг оптимизирует затрату ресурсов, ответит, что это и так очевидно, и не нужно туда лезть...
Как вы точно сказали про душевные травмы
atcoder это типа просто?)
Я имел ввиду одна из первых рекомендаций из документа: решать A и C с AtCoders Beginner Contests Так-то вы правы и на любом сайте есть место для задач любого уровня сложности. Возможно, недостаточно чётко объяснил из-за нехватки времени.
Многие рекомендуют, но по крайней мере AGC довольно жёсткие
Мне казалось, что у них уровень авторов задач очень высокий. Даже когда смотришь на простые задачи, они... бывают разные
Чисто из интереса, какая у вас мотивация этим заниматься?
Честно говоря, я пытался это применить к задачам из недавнего отборочного технокубка (задача B, даны n вершин, даны m условий, что b не может лежать на кратчайшем пути из a в c, и надо построить дерево, которое будет удовлетворять m условиям. и решение простое — найти такую "свободную" вершину, которая может лежать на пути между любыми вершинами, все оставшиеся вершины — дети "свободной вершины". доказательство решения тривиально, но как из даже формального условия прийти к решению. мне кажется, это опыт и не более. но уже порекомендовали нарешивать больше)
Обсуждают сегодня