Przeczytaj wskazówkę-podpowiedź nad twoim pytaniem.
PS
Pewnie chodzi o to, że n cyfr dotyczy liczby dziesiętnej a nie siódemkowej.
99 dziesiętnie - liczba 2 cyfrowa = 201 [w systemie siódemkowym]
9999999999 dziesiętnie - liczba 10 cyfrowa = 502544411643 [w systemie siódemkowym]
dowolna liczba dziesiętna n-cyfrowa [gdzie n <10000] = ?? w systemie 7
ale i tak przewiduję twoim sposobem TLE.
PS 2
int wynik = wsp[0];
for(int i=1;i<=st;i++)
wynik=(7*wynik+wsp[i])%x;
prawidłowo np:
int wynik = 0;
for (int i = 0; i < st; i++)
wynik = (7*wynik + wsp[i]) % x;
PS 3
Twoje testy są nie przemyślane - takie na pałę, tylko aby były. W systemie siódemkowym nie ma cyfr 7, 8 i 9.
- Prawdopodobnie gubi Cię nadmiar warunków, sam się w nich gubię, więc tym bardziej kompilator. W takich przypadkach należy pododawać nawiasy - kompilator nie wypisywał warringów?
Można też zmienić tak kod, aby nie sprawdzać tych warunków, np na początku:
jeżeli x == 1 && liczba[0] == '0' to wypisujemy i wracamy do while(t--) <-- np continue
Takia drobna kosmetyka:
2 Tablica tab jest całkowicie zbędna. Można przecież od razu:
sum0 += liczba[i] - '0';
else ....
3. cout << "TAK" << " "; =====> cout << "TAK ";
cout << "TAK" << endl; lepiej: cout << "TAK\n";
PS
Ten warunek if (x < 4) jest zbędny - jeżeli na początku sprawdzisz czy liczba ==0
sprawdzasz oczywiście: if ((liczba[x - 3] == '0' .....
PS 2
sorry, oczywiście nie tak jak wyżej, ale:
if ((liczba[x - 1] == '0' && .... && ... ) //gdy tylko będzie 1 fałsz dalej nie jest sprawdzane, np 10, 100 itd., a czy 0 sprawdziłeś na początku. Nie ma liczb 00 ani 000
- Czy 0 dzieli się bez reszty przez 6?
- Ten warunek || (sum0 - sum1) == 0 nie jest błędem ale jest nadmiarowy i zbędny .
- Dodaj koniecznie ios_base::sync_with_stdio(0);, bo bez tego tle.
- Pierwszy warunek można uprościć do: if (liczba == "0") // tym razem podwójny cudzysłów.
PS
5. zamiast: if (i % 2 == 0) można: if (i & 1 == 0) lub if (i & 1) + zmiana kolejności bo i & 1 = i%2 == 1
PS 2
6. t_sum jest nadmiarowy i potrzebny jednorazowo Możesz if((sum0 + sum1) % .......)
Ad.1 a czy to ma jakieś znaczenie? jak jest 0 to się ta część kodu nie wykonuje, chyba że odnosi się to do pkt.2, wtedy rzeczywiście "|| (sum0 - sum1) == 0" ta część była zbędna.
Ad.3 Cały czas miałem WA, wiec nie dodałem.
Wskazówki pomocne, jednak cały czas WA.
Edit:
W końcu zaliczone. Wielkie dzięki Narbej za porady Głupie przeoczenie z mojej strony.
witam, sędzia wyrzuca mi złą odpowiedź, pomimo że w wielu testach uzysuję poprawne odpowiedzi
mój kod: https://pastebin.com/rqG4emDY25
zupełnie nie rozumiem, co znaczy, że w wielu testach uzyskujesz poprawne odpowiedzi - czy znasz takie testy dla których uzyskujesz niepoprawne ?
natomiast rozumiem, dlaczego sędzia ci daje WA - powód prosty, nie zrozumiałeś treści zadania, przeczytaj jeszcze raz dokładnie, albo dwa, trzy ... razy, aż do pełnego zrozumienia
PS. istnieje bardzo małe prawdopodobieństwo, że używając Python-a zmieścisz się w czasie - tylko dwa zaliczone rozwiązania nie są C/C++, jedno Pascal, i jedno w ASM
"pomimo że w wielu testach uzysuję poprawne odpowiedzi"
pisząc to miałem po prostu na myśli to, że wprowadzałem wiele liczb podzielnych przez 6,8 czy 343 i program działa bez zarzutu tzn. prawidłowo klasyfikuje to czy liczba jest pozielna przez powyższe wartości czy nie
teraz dopiero zauważyłem dlaczego dostaję WA , jednak warto dokładnie czytac polecenia
udało mi się naprawić błąd i tak jak wspomniałeś używając Pythona nie mieszczę się w czasie (ale spróbuję może to jakos ulepszyć)