Sposób obliczania liczby-kodu graya opisany jest w zadaniu, w tym wątku, są jakieś podpowiedzi jak to zoptymalizować, czyż nie?
W dobrym kierunku - chodziło mi, jak sprawdzisz, czy twój nowy kod jest lepszy - szybszy od poprzedniego. Bo jeżeli zostawiasz komputer, to jak sprawdzasz różnicę czasów między pierwszą wersją a drugą? Jedna kawa, przy drugim, a trzy kawy przy pierwszym?
Musisz powinieneś wykonywać pomiar czasu wykonania się programu!! Inaczej jak ocenisz ten aspekt - szybkość poszczególnych wersji? Jeżeli program wykonuje się tak długo, to na początku dobierz i testuj na mniejszym, ale nie za małym teście. Jak mierzyć czas? Jak nie wiesz, to rób to np na ideon, “wkładając” dobrany, odpowiedniej wielkości test. Jeżeli za mały, będziesz miał zawsze time = 0, jeżeli za duży timelimit.
W tym zadaniu BigInt, który jest dobre do innych zadań, jest niepotrzebne. Wczytujesz liczbę jako string, konwertujesz na postać binarną robisz xor i wypisujesz.
Czy dla xor, potrzebujesz dwóch liczb [dwóch stringów]
Czy możesz to zrobić “w miejscu” na jednym stringu, poruszając się w odpowiednim kierunku!?
A może, ewentualnie odpuść sobie na razie, a jak nabierzesz wprawy wróc do tego zadania? 
PS
Czysty kod. Warto wiedzieć, że istnieja takie cuś i starać się do niego dążyć - do pisania czystego kodu [Clean Code]
PS 2
Możliwe, z twojego opisu wygląda, że właśnie tak robisz xor
PS 3
Można być może, zapisać liczę binarną in reverse - jeżeli to pomoże. Powinienem w końcu zaglądnąć do mojego starego i brzydkiego [not clean] kodu i go wyczyśćić i poprawić
Ale z drugiej strony, skoro jest już dostępny “na świecie” C++20, a na spoju ciągle "tylko C++14, [w tym zadaniu nawet nie], to czy warto się w to angażować? Możesz zawsze [po]prosić adminów, aby coś z tym w tym kierunku [z]robili! Mi na tym nie zależy.