Więc pokolei. Odpowiedź będzie po to by Cię nauczyć programowania, a nie byś rozwiązał tylko to jedno zadanie (choć jak się zastosujesz to na pewno rozwiążesz)
Podpowiedź 1 - uwaga tyczy się nie tylko tego zadania, a… wszystkich
Pierwsze chodziło mi o inne zamienianie string
na int
, łączenie cyfr dałem jako osobny podpunkt więc z penością chodziło o coś innego. Teraz powinieneś się domyślić, że nie jesteś pierwszą osob, która chciała zamienić string na int więc pewnie ktoś na świecie wymyślił sposób optymalniejszy niż Twój. Jeżeli chcesz sam to:
rzutowanie char -> int + tablica ASCII
ale to nie będzie o wiele szybsze. Teraz ta podpowiedź:
jeżeli robisz cośco robiło milion ludzi wcześniej to po prostu znajdź na internecie jak to zrobić łatwo i szybko. Masz dumać nad algorytmem, nad tym jak z farb namalować piękne dzieło, ale nie wytwarzaj farb i pędzla! Przynajmniej nie na początku.
w google zamiast “string to int c++” wpisujesz “fastest string to int c++” i na pewno znajdziesz, zobacz jakie można osiągnąć różnice czasowe.
Podpowiedź 2. Również tyczy się wszystkich zadań, całego forum, moich postów, a już na pewno postów @narbej : jeżeli ktoś Ci podpowiada to chce żebyś sam do tego doszedł więc pewnie nie powiedział wszystkiego. A w zasadzie powiedział, ale nie przeczytałeś uważnie. Zaznaczam najważniejszy fragment mojej wypowiedzi:
string “123456789” nie zamieniam na tablicę [1][2][3][4][5][6][7][8][9], a np. na [1][23][45][67][89]
Mógłbym też to pokolorować. Zapamiętaj ten fragment.
Tak więc jeżeli zamiast tworzyć tablicę pojedynczych cyfr zrobię to w parach i uzyskam ~2x czas to jeżeli zrobię to np. w trójki to nie będzie jeszcze szybciej? Dalej nie będę kontynuował, ale mam nadzieję, że zrozumiałeś iż nie chodzi mi wcale o łączenie w trójki na tym koniec, prawda?
Podpowiedź 3. Tyczy się wszystkich zadań (jak wszystkie powyższe)
Co by się stało jakby autor zadania był wredny (a zazwyczaj tacy są) i inputem była najpierw ogromna ilość testów, a później bardzo proste liczby? Np.
1000
5 3
12 17
1 4
...
111 1
8374298743274398743 374298729874329843 123312123
czy Twój program będzie działał optymalnie również dla prostych przykładów? Musisz robić zadanie tak by najtrudniejsze wyliczyć jak najszybciej, ale nie psuć czasów banalnych. A tak zrobiłeś swoim kodem.
Podpowiedź 4. Tylko do Ciebie: przestań czepiać się tablic i sposobu alokacji pamięci. W miarę dobrze ją wykonujesz. Jak masz wynik ponad sekundy, to nie czepiaj się tego na czym zyskasz 0.01 tylko tego co na prawdę działa powoli.
PS. Ja nie użyłem tablic w tym zadaniu. Jednak nie ma to większego znaczenia (w tym zadaniu).