Problem ze SPOJem

Problem ze SPOJem
K3
  • Rejestracja:około 13 lat
  • Ostatnio:około 7 lat
  • Postów:92
0

Otóż robię zadania na pewien konkurs robiony na SPOJu. Mam tam zadanie gdzie dane wejściowe są z góry nieznane .Po przejrzeniu tematu w internecie zorientowałem się że chodzi o taką konstrukcję :

Kopiuj
while(!cin.eof())
           {
          //pobieranie danych i algorytm 
}

Lecz kod ten pobiera poprawnie 1 wiersz danych. Kolejne wiersze nie są brane pod uwagę i zamiast nich pobiera jakby cały czas pierwszy. Jak rozwiązać ten problem?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:11 dni
0

Po pierwsze. wystarczy while(cin).
Po drugie, jeżeli w kolejnym wierszu ma być co najmniej dwie liczby to lepiej while(cin>>a>>b)
Po czwarte, ten efekt o którym mówisz jest możliwy przy próbie wczytania litery jako liczby.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K3
  • Rejestracja:około 13 lat
  • Ostatnio:około 7 lat
  • Postów:92
0

Nie działa. Próbuje kompilować ten prosty przykład na Ideone.com :

Kopiuj
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int x,y;
    int suma=0;
    while(cin>>x>>y)
           {
           cin>>x>>y;
           suma+=x+y;
           }
cout<<suma;
} 

Wejście :

Kopiuj
45 56
34 34
22 11

Wyjście :

Kopiuj
 101

Wyjście powinno być 202, nie wiem czemu tylko wykonuje się jakby raz.

edytowany 1x, ostatnio: kolarz3
Z8
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:76
0
Kopiuj
 while(cin>>x>>y)
           {
           cin>>x>>y;

Po co pobierasz dwa razy wartości ? . W while już ci pobrało wartości to drugi raz tego nie robisz.


bartlomiej-wasik.pl
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:11 dni
0
Kopiuj
#include <iostream>
using namespace std;
int main()
  {
   int x,y,suma=0;
   while(cin>>x>>y) suma+=x+y;
   cout<<suma;
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K3
  • Rejestracja:około 13 lat
  • Ostatnio:około 7 lat
  • Postów:92
0

Niestety z niewiadomych dla mnie błędów pętla wykonuje się za krótko, nie wiem czemu tak jest.

Kopiuj
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
 {
 ios_base::sync_with_stdio(0);
 int x,y,z;
 int byl=0;
 while(cin>>x>>y>>z)
 {
 byl++;
 }
 cout<<byl;
 }
 

Dla 10 000 linijek program wczytuje dokładnie tylko 8 548.
http://ideone.com/K2P0hn
Dlaczego się tak dzieje?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:11 dni
0
kolarz3 napisał(a):

Dla 10 000 linijek program wczytuje dokładnie tylko 8 548.
Dlaczego się tak dzieje?
Bo dokładnie tyle 8548 wierszy masz zapisanych d danych wejściowych.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K3
  • Rejestracja:około 13 lat
  • Ostatnio:około 7 lat
  • Postów:92
0

A nie wiesz może przypadkiem jak wysłać więcej wierszy, bo automatycznie jak więcej wysyłam to skraca wejście?

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 5 lat
  • Postów:2412
0

Blokada jakas na ideone.
user image

K3
  • Rejestracja:około 13 lat
  • Ostatnio:około 7 lat
  • Postów:92
0

Już rozwiązałem swój problem, okazało się że nie dostawałem pkt. ponieważ nadpisywałem pamięć, która nie była zarezerwowana.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.