Pierwsze co powinienes zrobic to sprawdzic maksymalny test, potem przeczytac te 130 odpowiedzi powyzej i dopiero dopisac swoje pytanie. Zadanie jest proste ale wymaga inengo podejscia. W pierwszych 5 odpowiedziach masz rozwiazanie twojego problemu, nawet ktos napisal co musisz zrobic. Tego testu twoj program nie przechodzi.
1
1000000000 1000000000
Witam.
Napisałem dla treningu kod. Wydaje mi się że działa dobrze. Nie mogę znaleźć błędu. Jakieś propozycje co to liczb do sprawdzenia.
Pozdrawiam.
Konrad
Wejście jak w treści zadania. W pierwszej linii ilość testów. W następnych testowane pary liczb.
przykładowy test:
10
0 0
3 0
0 5
10 1
1 44
2 12
3 5
99999999 3
11111111 99999999
22222 0
1
1
0
0
1
6
3
9
1
1
czas wykonania programu to 0 sekund
usuń swój kod (poprawne i bliskie poprawnym kody po wyjaśnieniu problemu nie powinny być prezentowane - niech inni też mają szanse samodzielnie rozwiązać problem)
nie ma takiej pary liczb (w zakresie podanym w zadaniu), dla której twój program zwraca błędna wartość - niemniej wyjście programu nie spełnia warunków podanych w zadaniu
a skąd mam wiedzieć czy usuwasz, czy nie ?
ja w każdym razie po usunięciu tych linii dostałem AC
fragment poniżej znalazł się tu na skutek pomyłki (dotyczy innego zadania)
-choć ze skandalicznym czasem (bo algorytm nie ten właściwy, a przechodzi tylko dlatego, że aktualna maszyna testująca jest około 100 razy szybsza niż w momencie publikacji zadania)
nie wiem, pewnie tylko autor zadania może to zmienić, szkoda bo obecnie dla starszych zadań często przechodzą rozwiązania, które miały być (i kiedyś były) niezaliczone
zmniejszenie czasu miałoby także skutki uboczne - dla wielu zadań (głównie z dużymi danymi wejściowymi/wyjściowymi) wyeliminowało by rozwiązania w C#, JAVA, Python, a to obecnie spory procent rozwiązań (a nie egzotyka, jak kiedyś)
Raczej nie, Bo:
- Limit już jest zmieniony.
- 100 to jest tylko bardzo grube przybliżenie i uproszczenie.
- Złe algorytmy nie przechodzą - wystarczy popatrzeć na statystykę i najlepsze wyniki http://pl.spoj.com/ranks/PA05_POT/12 :
Rozwiązało osób Zgłoszeń zaakceptowano Błędna odpowiedź Błąd kompilacji Błąd wykonania Przekroczono limit czasu
7426 65494 8771 29328 7598 2999 16746 - Mmoim zdaniem na SPOJ'u, nie ma specjalnego znaczenia, podkręcanie limitów i zwiększanie testów, w przeciwieństwie do konkursów typu algoliga, czy fraktal - ale tam jest to na "bieżąco" robione.
- Nie jestem zwolennikiem zbytniego podkręcania limitów, bo potem są problemy z zaliczeniem zadań w wolniejszych językach.
- Rozwiązywacz powinien samodzielnie i krytycznie podejść do swojego rozwiązania i uzyskanego swojego czasu w porównaniu do najlepszego..
PS
AD 3
Oczywiście 16746 zgłoszeń kodów, które były za wolne [TLE] to wynik od początku istnienia zadania. Wystarczy sprawdzić teraz i zobaczyć czy ta liczba się nadal powiększa? I faktycznie tak jest, są nowe takie zgłaszenia.
Witam, pomoże ktoś rozkminić błąd?
http://ideone.com/SNplXp4
Potęgi liczone na ifach (4 potęgi) sprawdzanie czy podstawa nie jest 0 chociaż osobiści wydaje mi się to zbędne bo dane wejściowe 1+..
Ogólnie utknąłem w tym miejscu. Wyniki chyba są ok. Zaczynałem od if w==5 cout 5... i zostały grupy gdzie od wykładnika odejmujemy 2 dla 9 i 4 lub 4 dla 2 3 7 8. Finalnie wszystko sprowadza się do 4 potęg chociaż dla szybkości chyba 1 opcja lepsza.
Troche juz nad tym zadaniem przesiedzialem i kazdy test ktory przeprowadzam na moim kodzie daje wynik prawidlowy. Problem w tym ze sedzia wyrzuca mi blad. Czy moglby ktos zerknac na moj kod?
http://ideone.com/3vcg3o12
z tego wniosek, że przeprowadziłeś za mało testów - wg. twojego algorytmu masz do przeprowadzania 40 testów - więc się nie leń i je zrób
przekazany kod nie kompiluje się - trochę to nieładnie wobec osób, które mają sprawdzić twój kod
metoda kopiuj/wklej jest świetna- w generowaniu trudnych do zauważenia błędów
a generalnie nawet gdy będziesz miał poprawne wyniki, to sędzia nie powinien ci zaliczyć tego zadania ze względu na wyjątkową brzydotę kodu
Witam , czy nakieruje mnie ktoś jak usprawnić poniższy kod , by nie wyrzucało mi przekroczenia czasu ?
#include <iostream>
using namespace std;
int how_many=0;
int principle=0;
int index=0;
long int potega(int podstawa, int wykladnik)
{
if (wykladnik==0)
{
return 1;
}
else
{
return podstawa*potega(podstawa,wykladnik-1);
}
}
int main()
{
cin>>how_many;
for(int i=0;i<how_many;i++)
{
cin>>principle>>index;
cout<<potega(principle,index)%10<<endl;
}
return 0;
}
Tego kodu w kontekście tego zadania nie da się usprawnić. Masz tu nie tylko przekroczenie limitu czasu ale masz też, dla niektórych testów, przekroczenie zakresu typu long long, a tym bardziej long int.
PS
Tyle o tym już tu napisano w tym i innych wątkach poświęconych temu zadaniu, że aż dziwne, że nie doczytałeś.