1 / 16
Feb 2016

AC

Jak mozna przyspieszyc ten program?
Przekroczono limit czasu.

  • created

    Feb '16
  • last reply

    May '20
  • 15

    replies

  • 1.7k

    views

  • 9

    users

  • 4

    links

Tak się nie wczytuje nieokreślonej ilości danych - aż do EOF.
Jeżeli używasz scanf, yo:
while (scanf(.....) != EOF)
gdzie EOF to najczęściej -1, więc można też tak:
while (scanf (,,,,) != -1)

Jeżeli używasz cin, to właśnie tak jak masz:
while (cin >> c >> d){
....

PS
To co wkleiłeś [kod] nie kompiluje się, ale nie ważne.

dzieki, to duzo zmienia. Lecz teraz dostaje WA, wpasc na popelniony blad poki co nie moge.

wczytywanie masz odwrotnie niż deklaracje.

2 x minus daje plus.

a i b <2^31 ale czy a * b też?

Może coś jeszcze?

Jeżeli amount jest typu int, to ta linia wydrukuje CI głupoty, a tak nawiasem, testujesz swój program na danych z zadania? Jeżeli nie u siebie, to możesz to robić na ideone.com , wklejając i swój kod i test

  1. 2^31 * 2 ^31 < unsigned long long int
  2. dzielenie ma pierwszenstwo przed odejmowaniem ,wiec
    amount -= ((c - 1) / ((a * b) / e));
    jest w porzadku.
  3. Dzieki, bo faktycznie typy wczytywane zawazyly.

To prawda, a nawet więcej: wink

2^31 * 2 ^31 < long long int
ale to nie znaczy, że nie miałeś tam błędu. Npisz sobie programi, podstaw różne wartości,potestój a wtedy możemy podyskutowaćwink Np coś takiego:
int a = 1000000000, b = 1000000000;
[unsigned] long long c;
c = a* b;
cout << c << endl; // pewnie nie wiesz czemu to jest źle? Napisz programik i potestuj

AD 2
Czy ja gdziekolwiek wspominałem o odejmowaniu czy dzieleniu?Może tylko, że dwa razy minus to plus, bo to miałeś też zrypane.

AD 3
Nie ma za co, ale błędów było trochę więcej, a nie tylko samo wczytywanie. Wczytywanie nie zaważyło, ale przepełniło czare. wink

PS
A wstawienie wszędzie typu long long może spowodować tle w innych zadaniach, więc trzeba nauczyć się ich oszczędnego i uzasadnionego [tam gdzie są faktycznie potrzebne] używania.

10 months later

Mam problem z zaliczeniem tego zadania, sędzia daje WA, na ideone http://ideone.com/AzVawL20 przechodzi bez problemu. Nie wiem gdzie leży błąd. Proszę o jakąś wskazówkę. Tak swoją drogą na poziomie łatwe sędzia mógłby podawać dla jakich danych nie przechodzi kod...

Naprawdę!? :wink:
więc sprawdż dla dowolnego testu:

test<enter>
test<enter
<eof>

Twój kod działa tylko dla:

test<enter>
test<eof>

http://ideone.com/LQiawP11
Nie rozumiem, czemu zmieniłeś prawidłowe wczytywanie:
while (cin >> x >> y) ...
na błędne:
....while(!cin.eof())

A potem, przetestuj np [np na ideone]:
3 5
1 2147483647

PS

I co jeszcze? parzył kawę i głaskał po główce? -:wink:
Sędzia działa jak działa, można przyjąć, że znajduje pierwszy błąd - tu już na małym teście masz WA i dalej już nie sprawdza. Gdy poprawisz, wrócisz, do poprawnego wczytywania, pierwszy mały test będzie ok, ale na następnym, większym będzie natychmiast tle. W taki sposób tego zadania nie zaliczysz - nawet na ideone.com, np dla testu:
3 5
1 2147483647
out [liczyłem na piechotę], to:
1002159035

4 months later

Hej, czy ktoś mógłby mi podpowiedzieć jakiś test, do tego zadania? Sędzia odrzuca moje rozwiązanie ;/

Dzięki wielkie, jest już AC :slight_smile:

Np ten test ze starego forum Ci nie przechodzi.

4 6
1 10
2 15

Powinno być:

3
4
9 months later

Witam mam pytanie, jak tutaj mogę przyspieszyć algorytm bo na SPOJu wyrzuca błąd z powodu za długiej kompilacji.

Na SPOJ’u nie ma takiej możliwości, ani nie ma takiego błędu.

T[u]o se ne da, pane Hawranek.

Musisz wymyśleć inny.

6 months later

Dzień dobry nie wiem jak przyspieszyć mój program. Chciałbym prosić o małą podpowiedź.

musisz wymyślić coś innego, to nie przejdzie. Przedział jest duży i sprawdzenie każdej liczby od 0 do 2^31 będzie trwało wieki.

1 year later

Możesz podpowiedzieć co zrobić by nie sprawdzać każdej wartości bo jest to za długie.