134 / 237
Apr 2017

Dzisiaj wkleiłem dokładnie ten sam kod i działa, a nie zmieniałem nic. Wczoraj jeszcze nie działał. Dziwne.

Tak, jak pisałem poprzednio, usuń link do programu - niech inni mają szansę na samodzielne rozwiązanie problemu :slight_smile:

Nie używaj zmiennych globalnych i funkcji endl. Nie wiem po co ci nowa linia po każdym cin.

Przeglądnij ten temat jeszcze raz, z funkcją pow sędzia i tak ci wypluje 'przekroczony limit czasu'. Najlepiej wypisz sobie na kartce 10 pierwszych potęg każdej z liczb i wtedy napisz program jeszcze raz

Cześć
Da się jakoś przyspieszyć mój program żeby mieścił się w czasie, czy lepiej napisać innym sposobem?
Co powinno się stać jeśli spróbuję rozważyć np.12 przypadków, w zadaniu jest max 10?

#include <iostream>
#include <math.h>

using namespace std;

int a[9],b[9], D;
long long potega;

int main()
{
    cin >>D;
    cout << endl;

    for(int c=0; c<D; c++)
    {
        cin >> a[c];
        cin >> b[c];
        cout << endl;
    }
    for(int c=0; c<D; c++)
    {

        a[c]=a[c]%10;
        if(b[c]==0)         cout << 1 <<endl;
        else
        {
            if(b[c]%4==1)
            {
                b[c]=1;
            }
            else if(b[c]%4==2)
            {
                b[c]=2;
            }
            else if(b[c]%4==3)
            {
                b[c]=3;
            }
            else if(b[c]%4==4)
            {
                b[c]=4;
            }
            else if(b[c]%4==0)
            {
                b[c]=4;
            }
            potega = pow(a[c], b[c]);

            cout << potega%10 <<endl;
        }
    }
    return 0;
}
8 days later

http://ideone.com/0eyGsx14

Wyskakuje mi błąd, że za wolno chodzi. Domyślam się, że trzeba dać jakieś z góry założenia? Jakaś podpowiedź jak to łatwo zauważyć? Dodatkowo zastanawia mnie dlaczego program wyświetla błędne wyniki dla dużych potęg? Widzi ktoś jakieś błędy?

Z góry dzięki za każdą pomoc, pozdrawiam! :slight_smile:

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

1 month later

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

Kod usunięty. Sorry to moje pierwsze kroki na portalu i oczywiście nie przeczytałem regulaminu.

Dlaczego wyjście nie spełnia warunków?(linie z czasem wykonania zadania usuwam gdy sprawdzam kod).

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)

Jakaś szansa na około stokrotne zaostrzenie limitu czasu?

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ś)

Faktycznie teraz działa. Zwraca mi czas 0.0 s.
Tobie pokazuje inny czas?

też pokazuje 0.0 - informacja z czasie była błędna, miała dotyczyć innego wątku

2 months later

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.