SPOJ - Prędkość średnia - błędna odpowiedź

SPOJ - Prędkość średnia - błędna odpowiedź
madzieq
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 7 lat
  • Postów:83
0

Witam,

jestem na etapie 'walki' z zadaniem, które niby jest banalne, a jednak SPOJ wyrzuca mi "błędna odpowiedź".

Wszystko zwraca tak jak powinno, nie potrafię znaleźć takich prędkości z zakresu <1, 10000>, aby program niepoprawnie obliczył mi prędkość średnią.

Czy ktoś może ma pomysł dlaczego?

Kopiuj
#include<iostream>

using namespace std;

int main()
{
    unsigned int t, v1, v2, srednia;

    cin >> t;

    for(int i=0; i<t; i++)
    {
     cin >> v1 >> v2;
     srednia = (2*v1*v2)/(v1+v2);
     cout << srednia;
    }
    return 0;
}

Pozdrawiam.

edytowany 2x, ostatnio: madzieq
PR
  • Rejestracja:około 11 lat
  • Ostatnio:9 dni
  • Lokalizacja:Pomorskie (Stare Kabaty)
1
Kopiuj
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
	short int v1; //predkosc srednia z a do b;
	short int v2; //predkosc srednia z b do a;
	short int vsr;
	int lT;cin>>lT;++lT;
	while(--lT)
	{
		cin >> v1 >> v2;
		vsr = (2*v1)*v2 / (v1 + v2);	
		cout << vsr << endl;
	}
	return 0;
}


btw. starczą short int-y

edytowany 3x, ostatnio: Proxima
Zobacz pozostałe 10 komentarzy
PR
Pora sie przyznać że używając mniejszego typu danych liczyłem na większą szybkość (ale nie mam "twardych dowodów" że to faktycznie przyspieszy). Powiedz mi dlaczego to spowolni ten kod bo to mnie najbardziej nurtuje teraz
Endrju
Dlatego tak wypytuje, bo tak właśnie myślałem. Lepiej operować na naturalnym dla maszyny rozmiarze typu. int taki właśnie (w założeniu) jest. Ponieważ short int może być mniejszy niż int operowanie na nim może wymagać dodatkowych instrukcji. W C i C++ typy mniejsze niż int są promowane podczas operacji matematycznych, ale potem może zajść potrzeba konwersji do typu mniejszego - to dodatkowa operacja. Oczywiście czasami tak ma właśnie być i jest to porządane, natomiast w ogólnym przypadku raczej nie jest to potrzebne. Zobacz: http://goo.gl/CBFoVR
hauleth
http://stackoverflow.com/questions/4445303/short-int-vs-int - słowo klucz - długości rejestrów. Przy short int trzeba czasem pominąć część słowa przy pomocy operacji bitowych (przez co tracimy cykle).
Endrju
Jeszcze tylko uwaga: co innego jeżeli chodzi o wektoryzację. Krótszych typów można wpakować więcej do wektora i to dobrze. Tak samo więcej krótszych zmiennych może zmieścić się w cache'u procesora. Natomiast to raczej nie są typowe przypadki. Raczej lepiej jest początkowo używać normalnych typów a dopiero potem zmieniać, jeżeli wykaże tak profiler.
PR
No to pozamiatałeś, wszystko jasne, dzięki :)
fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
1

Nie dziala poprawnie. Dzielisz na intach wiec wynik zawsze jest całkowity.

Czyli jak będzie 5/2 to u ciebie wynik będzie 2 zamiast 2.5

PR
Normalnie przechodzi na całkowitych.
fasadin
nie wiem jaka tresc zadania...
madzieq
Fragment treści zadania: "Uwaga: Dane wejściowe będą tak dobrane, aby wynik był liczba całkowitą." :*
madzieq
Sorry, zapomniałam linka wstawić xP http://pl.spoj.com/problems/VSR/
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
4

A gdzie endline? :D

Kopiuj
 
for(int i=0; i<t; i++)
    {
     cin >> v1 >> v2;
     srednia = (2*v1*v2)/(v1+v2);
     cout << srednia << endl;
    }
edytowany 1x, ostatnio: LuIMi
madzieq
No nie gadaj, że to przez to xd
LI
Tak, to przez to :D
madzieq
Dalej wywala błędna odpowiedź :/// :(
PR
to weź mój kod, on przechodzi (sprawdzone przed momentem) :D
LI
Bo to nie to zadanie :D Podałaś linka wyżej do zadania z kompletnie innym kodem/problemem. Myślałem, że chodzi o to: http://pl.spoj.com/problems/VSR/ Wtedy rozwiązanie byłoby dobre, to zadania http://pl.spoj.com/problems/PP0604A/ rozwiązanie będzie inne.
PR
no ja też myślałem że o VSR chodzi. Jak sie ma średnia arytmetyczna do prędkości średniej, hm?
LI
@Proxima Nie to zadanie :D
madzieq
Ale wstyd, wklejałam odpowiedź do nie tego zadania xd dobra już działa dzięki Wam :D

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.