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

Nieokreślona ilość danych a pętla while ()

Object Storage Arubacloud
0 głosów
557 wizyt
pytanie zadane 27 maja 2018 w SPOJ przez Kamil Paradowski Użytkownik (620 p.)

Witam, mam pytanie dotyczące języka C++. Otóż wiadomo, że przy zadaniach na SPOJ w których mamy nieokreśloną ilość danych stosujemy zazwyczaj pętle while, która wygląda na przykład tak:

int x;
while (std::cin<<x) 
{

}

Otóż w niektórych zadaniach osobiście stosuje pewną funkcję typu inline void, która szybciej wczytuje dane niż gdybym miał używać cin lub nawet funkcji scanf, jednak nie wiem jak mógłbym takową funkcje zastosować, jeżeli mamy styczność z takim typem zadania, gdzie wczytujemy tylko jedną zmienną i jest ona jednocześnie warunkiem pętli while. Dobrym przykładem takiego zadania jest zadanie pod tytułem “Sumy Wielokrotne”

http://pl.spoj.com/problems/KC008/

Jakie są jeszcze inne sposoby na to, aby móc wczytywać nieokreśloną ilość danych na SPOJ? Czy można wywołać taką funkcje w warunku pętli?

komentarz 27 maja 2018 przez niezalogowany
Jak wygląda ta funkcja?
komentarz 27 maja 2018 przez Kamil Paradowski Użytkownik (620 p.)
inline void scan_int(int &x)
{
    register int c=gc();
    x=0;
    bool neg=0;
    for(;((c<48 || c>57) && c!='-');c=gc());
    if(c=='-')
    {
        neg=1;
        c=gc();
    }
    for(;c>47 && c<58;c=gc())
    {
        x=(x<<1)+(x<<3)+c-48;
    }
    if(neg)
        x=-x;
}

 

komentarz 27 maja 2018 przez RafalS VIP (122,820 p.)
Serio to dziala szybciej niz cin? Testowales jak bardzo?
komentarz 27 maja 2018 przez niezalogowany

Funkcję można tak przerobić:

inline bool scan_int(int &x)
{
    register int c=gc();
    if (c == EOF) return false;
    x=0;
    bool neg=0;
    for(;((c<48 || c>57) && c!='-');c=gc());
    if(c=='-')
    {
        neg=1;
        c=gc();
    }
    for(;c>47 && c<58;c=gc())
    {
        x=(x<<1)+(x<<3)+c-48;
    }
    if(neg)
        x=-x;
    return true;
}

Nie wiem czy jest istnieje jakaś inna szybsza wersja. Wydaje mi się, że cin z sync_with_stdio ustawionym na false jest tak samo szybki.

komentarz 27 maja 2018 przez Kamil Paradowski Użytkownik (620 p.)

@RafalS, Tak, działa szybciej niż cin, wyniku na SPOJ są szybsze dla większej ilości testów.

1 odpowiedź

+1 głos
odpowiedź 29 maja 2018 przez Wisnia Bywalec (2,770 p.)
I wątek jest na liście, jako "bez odpowiedzi", a odpowiedzi w bród. Może warto zamiast "skomentuj", kliknąć "odpowiedz" ;-)
komentarz 29 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
Teoretycznie i praktycznie, odpowiedzi na zadane pytanie nie ma. Komentarze służą do tego, aby dopytać o więcej szczegółów, czy poruszyć temat niezwiązany (albo mało związany) z pytaniem.

Edit: więc w tym przypadku, pisanie tych wypowiedzi w odpowiedzi mija się z celem.
komentarz 29 maja 2018 przez Wisnia Bywalec (2,770 p.)
Pełna zgoda co do tego, po co są komentarze. Jednak jeśli ktoś zaczyna komentarz "Funkcję można tak przerobić: " no to jest to w mojej opinii próba odpowiedzi na pytanie. A czy to wyczerpuje temat, czy nie, to już należy do oceny autora wątku.

Dla mnie lista "Bez odpowiedzi" to jest lista postów w których nikt się jeszcze nie podjął próby udzielenia odpowiedzi. Gdyby chodziło o to, że nie ma dobrej odpowiedzi, to filtrem nie byłaby liczba odpowiedzi, ale to czy autor odznaczył jedną odpowiedź jako pomocną. A tak - wchodzę na listę "bez odpowiedzi" a tam cała dyskusja, w tym dwie sugestie jak rozwiązać problem. No ale wątek wisi na liście "Bez odpowiedzi".

Jestem tu nowy, może się mylę i czegoś nie rozumiem, jednak dla mnie to trochę bez sensu.
komentarz 29 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
W sumie to nie zauważyłem, że w komentarzach była zmiana funkcji (myślałem, że ta zmiana bardziej dotyczyła tego, żeby coś w tej funkcji przyspieszyć) dotycząca odpowiedzi na pytanie. Tak to masz rację, że powinno to być udzielone jako odpowiedź.

Podobne pytania

0 głosów
1 odpowiedź 230 wizyt
pytanie zadane 10 lipca 2020 w C i C++ przez Nikto0 Użytkownik (500 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 23 stycznia 2020 w C i C++ przez MatthewRose Nowicjusz (140 p.)
0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 14 lutego 2019 w SPOJ przez robotox1 Nowicjusz (150 p.)

92,563 zapytań

141,416 odpowiedzi

319,595 komentarzy

61,948 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!

...