C++ vs C#. Что больше подходит для моих задач?
Для понимания указателей нужно знать язык программирования низкого уровня: ассемблер. Именно ассемблер может более точно объяснить принцип работы указателей. Так как указатели пришли из мира низкоуровневого программирования. Но написали вы странно: когда пишете про C#, то пишете, что знакомы с ООП, а когда пишете про C++ - уже незнакомы с ООП. ООП - это всего лишь подход к программированию. И этот подход для каждого языка программирования общий. Если хотите писать игры на C#, то для этого есть Unity. Да и для большинства прикладных задач будет достаточно C#. С++ - хорош для реализации производительных задач. Порой на практике используют смешанный подход: что требуется для высокой производительности - пишут на С++, а всё остальное - уже на C#. Вполне нормальная практика. В программировании важно уметь работать с алгоритмами, продумывать весь механизм работы, понимать, как всё работает. С плохим алгоритмом на любом языке программирования программа работать будет плохо.
Указатели не так страшны как кажутся, просто требуют некоторой дисциплины.
Но вам больше подойдёт C#, именно из-за того, что многие низкоуровневые операции за вас уже написаны.
Если на олимпиаде критичным будет скорость исполнения, тогда лучше всё же C++