• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed (KOD W ŚRODKU) Przekroczono limit czasu w SPOJ, optymalizacja krótkiego programu

Object Storage Arubacloud
0 głosów
198 wizyt
pytanie zadane 2 lutego 2018 w Rozwój zawodowy, nauka, praca przez Patrick99 Nowicjusz (180 p.)
zamknięte 2 lutego 2018 przez Patrick99
Starałem się jak mogłem, ale nie potrafię bardziej zoptymalizować tego zapisu, może ktoś poda mi to, co mi umknęło? Algorytm dotyczy zadania http://pl.spoj.com/problems/PRZEDSZK/

#include <iostream>
using namespace std;
int zestawy, g1, g2, iloczyn;
int main()
{
    cin>>zestawy;
    for(int i=1; i<=zestawy; i++){
        cin>>g1>>g2;
        iloczyn=g1*g2;
        do{
            if(g1>g2) g1=g1-g2;
            else g2=g2-g1;
        }while(g1!=g2);
        cout<<iloczyn/g1<<endl;
    }
}

Z góry dziękuję i pozdrawiam.
komentarz zamknięcia: Problem rozwiązany

3 odpowiedzi

+1 głos
odpowiedź 2 lutego 2018 przez Pabiak Gaduła (4,450 p.)
wybrane 2 lutego 2018 przez Patrick99
 
Najlepsza
do
{
            if(g1>g2) g1=g1-g2;
            else g2=g2-g1; //tutaj jest źle

 }while(g1!=g2);

Powinno być else if(g1<g2), ponieważ else działa dla każdego innego przypadku, masz ifa (g1>g2), ale jeżeli g1 będzie równe g2, to nadal będziesz odejmować. Po poprawieniu tego ifa dostałem AC.

+2 głosów
odpowiedź 2 lutego 2018 przez niezalogowany
Tak właściwie problem polega na tym, że gdy masz przypadek g1 == g2 program zapętla się. Uwzględnij dodatkowego else if, albo zamień pętlę na while (z tym samym warunkiem).
+1 głos
odpowiedź 2 lutego 2018 przez vector Dyskutant (9,200 p.)
1) Źle otagowałeś swoje pytanie. Powinno się znaleźć w kategorii "SPOJ".

2) Wstaw kod w odpowiednie znaczniki. https://forum.pasja-informatyki.pl/faq#jak-wstawic-kod-zrodlowy

3) Liczysz nwd w czasie proporcjonalnym do maksimum z tych dwóch liczb (pesymistycznie). Możesz użyć funkcji o nazwie __gcd  znajdującej się w przestrzeni nazw std, która znajduje się w bibliotece algorithm. Ów funkcja działa znacznie szybciej niż twoja implementacja nwd.
komentarz 2 lutego 2018 przez Patrick99 Nowicjusz (180 p.)
Dzięki wielkie :D z góry przepraszam za błędy, moja pierwsze styczność z tym forum i nie od razu wszystko ogarnąłem, obiecuję poprawę i pozdrawiam :D z tym, że chodzi o NWW, a nie NWD, ale i tak dzięki za pomysł poszukania osobnej funkcji, robiłem na piechotę jak umiałem :D
1
komentarz 2 lutego 2018 przez TenGumis Gaduła (3,440 p.)
Myślę że rozwiązanie tego zadania nie polega na użyciu funkcji z biblioteki.
Poczytaj na wikipedii o algorytmach liczenia nwd. Istnieją szybkie metody ;)

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 22 grudnia 2016 w C i C++ przez fixed Nowicjusz (220 p.)
0 głosów
1 odpowiedź 1,067 wizyt
pytanie zadane 19 października 2016 w C i C++ przez Paq_93 Początkujący (260 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...