100 / 237
Oct 2016

Na ideone nie testowałem, tylko na kompie. I na kompie wszystko jest okej. Te przykłady, których użyłeś działają u mnie poprawnie, a na ideone już nie. O co chodzi? :confused:

25 days later

Witam,

poczytałem wszystkie wątki i już mam pomysł na inne rozwiązanie z case'ami :wink: jednak zapisałem to inaczej link14 i zastanawiam się dlaczego mi nie przechodzi.
Wykonałem wszystkie testy jakie tu podajecie i zawsze miałem prawidłową odpowiedź a mimo to dostaję od sędziego błędną odpowiedź :confused:

Byłbym wdzięczny za wskazówkę co zrobiłem nie tak.

wszystkich zamieszczonych tu testów to nie zrobiłeś - sprawdź dla danych zamieszczonych w poście nr. 52

Możesz jaśniej? Bo nie rozumiem.
W 52 jest o if a==0 <- co z założenia jest niepotrzebne, bo liczby są z zakresu 1 <= a <= 1000000000 :wink: a w sytuacji a==1 to moje rozwiązanie też powinno zadziałać; niemniej jednak dodałem if'a dla a==1, ale sędzie i tak nie przepuszcza.

Nie rozumiem, z czym sędzia ma w tej sytuacji problem.

Proszę o wyjaśnienie, nie rozwiązanie, bo chcę zrozumieć co jest złego w moim kodzie. Koduję dopiero tydzień, więc proszę o wzięcie tego pod uwagę przy pisaniu :slight_smile:

Z góry dziękuję za pomoc.

być może źle liczyłem posty :), może to jest 53 - w każdym razie autorem jest j4rooo, podany jest tam test dla około 40 par liczb, dla części z nich masz złe wyniki

Witam, u mnie test z postu 53 daje tyle wyników ile trzeba, natomiast mam problem z innym testem wypisanym tutaj,
http://ideone.com/tnXXKq16

Czy moglibyście dać jakaś podpowiedź co jest źle bo już mam załamkę?

Zwiększ zmienne do long long int.

Po tej zmianie:

Twoj out:
1
1
2
1
4
5
6
7
2
0
0

Prawidłowy out:

1
1
2
1
4
5
6
7
2
9
0

Czyli nie przechodzi ci tego testu:
1
9 21538123

dane wejściowe są z poza zakresu podanego w zadaniu i z poza zakresu int-a
zaś w przypadku używania cin, jeżeli wczytywana liczba przekracza zakres typu, to skutkuje to zniszczeniem strumienia wejściowego

dla tego testu zamiast 2321323123 wczytywane jest 2147483647 (max dla int-a), a później wczytywane wartości to same 0

10 days later

Witam, kod wydaje mi się dobry ale nie chce przejść więc coś musi być nie tak... Proszę o pomoc z tym

include

include

using namespace std;

int main()
{
int n;
cin>>n;
unsigned long long int a,b;
for(int i=0; i<n; i++)
{cin>>a;
cin>>b;

switch (a%10)
{

    case 1: cout<<1<<endl; break;
    case 2:
        {   int tmp=b - 4*((b-1)/4);

            if(tmp==4 )
                cout<<6<<endl;
            else if (tmp==1)
                cout<<2<<endl;
            else if (tmp==2)
                cout<<4<<endl;
            else if (tmp==3)
                cout<<8<<endl;
                break;
        }
    case 3:            {   int tmp=b - 3*((b-1)/3);

            if(tmp==1 )
                cout<<3<<endl;
            else if (tmp==2)
                cout<<9<<endl;
            else if (tmp==3)
                cout<<7<<endl;
                break;
        }
    case 4:
        {   int tmp=b - 2*((b-1)/2);

            if(tmp==1 )
                cout<<4<<endl;
            else if (tmp==2)
                cout<<6<<endl;
                break;
        }
    case 5: cout<<5<<endl; break;
    case 6: cout<<6<<endl; break;
    case 7:
            {   int tmp=b - 4*((b-1)/4);

            if(tmp==1 )
                cout<<7<<endl;
            else if (tmp==2)
                cout<<9<<endl;
            else if (tmp==3)
                cout<<3<<endl;
            else if (tmp==4)
                cout<<1<<endl;
                break;
            }
    case 8:
        {   int tmp=b - 4*((b-1)/4);

            if(tmp==1 )
                cout<<8<<endl;
            else if (tmp==2)
                cout<<4<<endl;
            else if (tmp==3)
                cout<<2<<endl;
            else if (tmp==4)
                cout<<6<<endl;
                break;
        }

    case 9:
            {   int tmp=b - 2*((b-1)/2);

                    if(tmp==1 )
                        cout<<9<<endl;
                    else if (tmp==2)
                        cout<<1<<endl;
                    break;
            }
    case 0: cout<<0<<endl; break;

}

}

return 0;

}

21 days later

Czy ktoś ma pomysł jak mogę przyśpieszyć program? Sędzia wyrzuca mi przekroczenie limitu czasu...

int n, p, w;

long int potega(int p, int w)
{
if (w==0) return 1;
else return p*potega(p,w-1);
}

int main()
{
cin>>n;

for(int i=0; i<=n; i++)
{
cin>>p>>w;
cout<<potega(p, w);
}

Przeczytaj dokładnie treść zadania. Tu nie chodzi o wynik potegowania.

Podpinam się, robiłem ten program już na wiele sposobów Pętlą teraz biblioteka matematyczna, było wszystko w mainie, było funkcjami pisane, a ciągle coś. Wcześniej, że przekroczono limit czasu, później błąd kompilacji, a teraz wywala błędną odpowiedź, dla kodu:

include

include

using namespace std;
int main()
{
long int l; //how many loops
long double a, b; // a^b
//int result;
long double re;
cin >> l;
for (int i = 0; i < l; i++)
{
cin >> a >> b;
re = pow(a, b);

	while (re > 10)
	{
		re = fmod(re,10);
	}
	cout << re << endl;
	}


}

Pisanie programu zaczynamy od myślenia, jeżeli ktoś ma z tym problemy (lub problem trudny), to może sobie pomóc używając kartki i ołówka.

W przypadku kłopotów najpierw czytamy wątek/wątki poświęcone temu zadaniu (najczęściej jest już tam odpowiedź), dopiero później piszemy.

  1. Zastanów się jakie mogą być maksymalne dane wejściowe . Dla liczby 2 do potegi Miliard przy założeniu że miliard razy w pętli mnożysz nie zmieści się w czasie . ( zapewne dlatego dostawałeś komunikat o przekroczeniu czasu - zrób u siebie test na duże liczby ) .

  2. Za mały zakres danych - standartowych typach danych można przechowywać liczby z pewnego zakresu , ale nawet największy typ danych nie przechowa 1 miliard do potęgi miliarda ( niektóre języki programowania mają wbudowaną obsługę dużych liczb ) . Na taką liczbe zabrakło by pamięci na serwerze na którym jest uruchomiony .

  3. Liczby zmiennoprzecinkowe jakie używasz w kodzie powyżej są reprezentowane są w szczególny sposób w pamięci komputera . Można za ich pomocą wyrazić bardzo dużą liczbe ale dzieje się to kosztem jej dokładności na miejscach mniej znaczących , Double z zapisaną liczbą 10 do potęgi 300 nie możesz potraktować moduło 10 -- bo taka liczba ma około 15 cyfr ( początkowych ) w zapisie dziesiętnym ( na których się wykonuje operacje ) a informacja z dalszych ( w tym ostatnich ) pozycji rozwinięcia dziesiętnego została utracona .

Zrób na swoim komputerze i sprawdź co zwraca kod

re = pow(a, b);
re = fmod(re,10);
cout << re << endl;

dla coraz większych liczb: a ^ b
2^ 10
2^ 11
2^ 12
....
2^100
2^101
.....
2^200
2^201

( Edytor frumo coś szaleje - nie pozwala mi wyliczać punktów - i odlicza znowu od 1 a powinno być 4 )

  1. Zastanów się jak szybko potęgować . Np : czy 5 do potęgi 32 trzeba 32 razy mnożyć aby otrzymać prawidłowy wynik .

  2. Operacje moduło ( arytmetyka moduło ) też charakteryzuje pewna powtarzalność .

  3. Nie możesz zrobić tego zadania bo zapewne nie wiesz o dwóch sztuczkach jakie trzeba znać i umiejętnie zastosować .

28 days later

`#include

using namespace std;
int x,y,test,ilo=1;

int main() {
cin >>test;
for (int i=0;i<test;i++)
{
cin >>x>>y;
for(int g=0;g<y;g++)
{
ilo*=x;
ilo%=10;
}
cout << ilo<< endl;
ilo=1;
}

return 0;

}`

Wywala błąd, nie wiem co zmienić ;-;. Jakaś wskazówka?

Sprawdź swój out dla przykładowych testów.
Poza tym wszystkie potrzebne informacje do rozwiązania tego zadania są już zebrane w tym temacie, pozostaje tylko zastosować :wink:

10 days later

Siema. Podłączam się do tematu.
Mianowicie mam napisany program, wszystko ładnie liczy, testowane na wszystkie mozliwe sposoby (ponizej link do ideone), ale sędzia nadal krzyczy, ze błędne rozwiązanie.
Wiem, że da się to rozwiązać troche krócej poprzez zastosowanie tablicy, ale chciałbym wiedzieć gdzie ja popełniłem błąd.

https://ideone.com/P1I0JZ17