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

Odpowiedz Nowy wątek
2015-04-08 20:52

Rejestracja: 5 lat temu

Ostatnio: 2 lata temu

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?

#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, 2015-04-08 20:54

Pozostało 580 znaków

2015-04-08 20:54

Rejestracja: 5 lat temu

Ostatnio: 3 tygodnie temu

1
#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, 2015-04-08 21:03
Pokaż pozostałe 10 komentarzy
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 - Proxima 2015-04-08 22:07
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 - Endrju 2015-04-08 22:25
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). - hauleth 2015-04-08 22:25
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. - Endrju 2015-04-08 22:27
No to pozamiatałeś, wszystko jasne, dzięki :) - Proxima 2015-04-08 22:35

Pozostało 580 znaków

2015-04-08 20:54

Rejestracja: 8 lat temu

Ostatnio: 4 tygodnie temu

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

Normalnie przechodzi na całkowitych. - Proxima 2015-04-08 20:56
nie wiem jaka tresc zadania... - fasadin 2015-04-08 21:03
Fragment treści zadania: "Uwaga: Dane wejściowe będą tak dobrane, aby wynik był liczba całkowitą." :* - madzieq 2015-04-08 21:03
Sorry, zapomniałam linka wstawić xP http://pl.spoj.com/problems/VSR/ - madzieq 2015-04-08 21:06

Pozostało 580 znaków

2015-04-08 21:00

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

A gdzie endline? :D


for(int i=0; i<t; i++)
    {
     cin >> v1 >> v2;
     srednia = (2*v1*v2)/(v1+v2);
     cout << srednia << endl;
    }
edytowany 1x, ostatnio: LuIMi, 2015-04-08 21:01
Pokaż pozostałe 3 komentarze
to weź mój kod, on przechodzi (sprawdzone przed momentem) :D - Proxima 2015-04-08 21:09
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. - LuIMi 2015-04-08 21:10
no ja też myślałem że o VSR chodzi. Jak sie ma średnia arytmetyczna do prędkości średniej, hm? - Proxima 2015-04-08 21:10
@Proxima Nie to zadanie :D - LuIMi 2015-04-08 21:11
Ale wstyd, wklejałam odpowiedź do nie tego zadania xd dobra już działa dzięki Wam :D - madzieq 2015-04-08 21:14

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0