Как подходить к решению нетривиальных задач?
Привет.
Всегда использую модель боли:
1) Смотришь задачу
2) Пытаешься её решить
3) Понимаешь, что ты тупой идиот, который ничего не может.
4) Поднимаешь в помощь гугл
5) Поднимаешь в помощь литературу
6) Спрашиваешь ребят на тему: "почему так, а не иначе".
7) Выполняешь задание, осознавая, что ты тупой, раз на решение этой задачи тебе пришлось потратить столько времени.
Повторить до бесконечности, и ты станешь профи.
Сам там балуюсь по мере свободного времени, сил и желания, чисто для поразмять мозги, т.к. в олимпиадах я участвовал давно, последний раз аж в 1998 году. Пруф: https://www.codewars.com/users/iCoderXXI
У меня не всегда получается сразу понять чего хочет автор задачки, приходится перечитывать раз по десять-дцать, вникать, в принципе как и в реальных боевых задачах в жизни. Всегда стараюсь построить в голове работающую модель процесса, так сказать в динамике, входящие и исходящие сигналы (данные), логику, алгоритмы.
Решаю итеративно, добиваясь прохождения тестов. Часто бывают пограничные случаи, которые далеко не сразу становятся очевидны и часто поначалу в ту сторону не думаешь, тут что называется хоть бы завелось вообще, а не то чтобы полетело. потом решение допиливаешь итеративно под каждый не прошедший тест.
Часть задач встречаются, которые ранее никогда не решал. Если не понятно о чем речь, то гуглю суть задачи. стараюсь избегать смотреть в решения, если они где-то встречаются, для меня принципиально решить самостоятельно, пусть не так идеально и красиво.
Когда смотрю решения других бойцов, часто вижу переусложненные, выпендрежные решения. Если бы в моей команде боец стал писать такой код, то он бы однозначно уехал решать индивидуальные задачи, потому что такое читать и понимать весьма непросто. Сам стараюсь писать код компромиссный, с одной стороны достаточно эффективный, с другой стороны понятный даже новичку.
Вообще моё ядро, как программиста, формировалось в условиях жестких ограничений, чего стоит только ограничение по памяти в 64 кб на переменные у паскаля. Конечно я не долго терпел это издевательство, и достаточно быстро разобрался с указателями, кучей, структурами данных, так-что моим программам было доступно до мегабайта и более под данные, хотя конечно логика становилась весьма витиеватая. 
Где-то даже сохранился код гипертекстового компилятора и просмотрщика, который я писал в 1997 году по заказу одного юриста. Сейчас оно никому не надо, т.к. есть всякие Консультант+, но по тем временам я считаю был весьма интересный продукт.  Кому интересно вот ссылка на гитхаб https://github.com/iCoderXXI/hypertext