Potrzebujesz dwóch rzeczy, żeby rozwiązać ten problem:
- Nauczyć się podstaw C++.
- Wpaść na (dobry) algorytm, który rozwiąże ten problem.
Co do pierwszego — są źródła w sieci, są źródła książkowe… Trzeba Przysiąść, Przeczytać, Przyswoić i Przećwiczyć (zasada czterech Pe). Tego się nie przeskoczy — żeby programować, trzeba umieć programować…
Co do drugiego — tutaj gorzej, bo tego się z książek nauczyć nie da. Najlepsza metoda, jaką znam, to próbować, próbować i próbować, aż w końcu zaskoczy. Można się podeprzeć jakąś książkową wiedzą o algorytmice, bo wielokrotnie ciężko samemu wymyślić optymalne rozwiązania czy umieć dowieść ich poprawności/optymalności, ale do samego startu — tzn. umiejętności wymyślenia jakiegokolwiek działającego rozwiązania — nie jest to potrzebne.
Nawiasem mówiąc, dostałeś już tutaj ode mnie działający i optymalny¹ (w sensie złożoności algorytmicznej; da się go pewnie w praktyce sporo przyspieszyć, np. traktując ten ciąg zer i jedynek jako pojedynczą liczbę i używając sprytnie clz
— ale to wymagać będzie benchmarkowania, a nie zakładania z góry) algorytm.
¹ Miałem chwilę pod prysznicem, żeby o tym pomyśleć i jestem w stanie przedstawić dowód, jak ktoś jest zainteresowany.