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

SPOJ - Dzielenie pizzy

Object Storage Arubacloud
0 głosów
758 wizyt
pytanie zadane 5 września 2017 w C i C++ przez Józef Niecierski Początkujący (440 p.)

Witam, nie działa mi program do zadania Dzielenie Pizzy (http://pl.spoj.com/problems/MWP3_3D/) ze SPOJ. Prosiłbym o wyjaśnienie, gdzie leży błąd. Dostaję wynik "błędna odpowiedź". Oto mój kod:

#include <iostream>
#include <cmath>
#include <math.h>
#include <iomanip>

using namespace std;

int zes;



int main()
{
    cin>>zes;
long long bok[zes];
long long lud[zes];
double ob[zes];
double coile[zes];
int ilc[zes];
double w[zes];
int dl[zes];

const double pi = acos(-1.0);
            for(int i=0;i<zes;i++)
            {
            cin>>bok[i]>>lud[i];
            ob[i]=bok[i]*pi;


            w[i]=ob[i]/lud[i];
            dl[i] =(int)log10(w[i])+1;

            if(lud[i]%2==0) ilc[i]=lud[i]/2;
            else ilc[i]=lud[i];

            cout <<setprecision(3+dl[i])<<w[i]<<" "<<ilc[i]<<endl;
            }

return 0;
}

Nie wiem, czemuż jest taka sytuacja, gdy ja sobie testuję, to nie widzę błędu. (Zakładam, że gdy liczba osób jest nieparzysta, to tyle cięć należy wykonać - rozumiem, że po prostu np. wykonujemy 5 cięć od środka, do brzegu co 72 stopnie, a gdy liczba cięć jest parzysta, to liczba cięć jest równa połowie liczby osób - może w tym rozumowaniu tkwi błąd). Proszę o pomoc.

1 odpowiedź

0 głosów
odpowiedź 5 września 2017 przez excavelty Bywalec (2,480 p.)
edycja 5 września 2017 przez excavelty

Nie jestem pewien, czy nie za późno i czy w ogóle Ci pomogę, ale zwróć uwagę, że dla nieparzystej liczby osób Twój program daje wyniki ok. 2 razy za duże. Na przykład taki test znaleziony na forum SPOJ-a:

2486540 548933

Out: 7.115 548933, a u Ciebie chyba: 14.231. Nie jestem pewien, co do precyzji nie rozumiem tej linijki (wybacz ignorację):P :

 dl[i] =(int)log10(w[i])+1; 

Ja użyłem po prostu:

cout << fixed <<setprecision(3)<<result1<<result2;

 

Po zmianie sposobu przeliczania odległości i określania precyzji program mi zaakceptował SPOJ(nie jestem pewien czy konieczna jest zmiana precyzji po prostu nie rozumiem sposobu jaki zastosowałeś, mam małą wiedzę:D).

Tak swoją drogą każde cięcie według zadania powinno mieć długość średnicy, więc chyba nie "od środka".

Nie jestem żadnym ekspertem, ale nienajlepiej wpłynęły na czytelność i na wydajność te tablice(sądząc po czasie wykonania programu). Wynik to może być jedna zmienna nadpisywana nowa wartością w każdym obrocie pętli.

1
komentarz 10 września 2017 przez Józef Niecierski Początkujący (440 p.)

Faktycznie, dziękuję, zaliczyli mi. Ta linia z dl[i] ma za zadanie podać liczbę cyfr liczby i-tej. Znalazłem to na jakimś forum i to się spisuje (bo z tego co się orientuję wynika, że setprecision(x) pokazuje zaokrąglenie takie, że wyświetla x cyfr łącznie licząc te przed i po przecinku, a miałem podać z dokładnością do 3 miejsc po przecinku, więc dzięk dl[i] wiedziałem ile cyfr będzie przed przecinkiem - właśnie dl[i]- a po miały być 3 więc w nawias przy setprecision wpisywałem dl[i]+3 (bo łącznie będzie tyle cyfr: dl[i] przed i 3 po), ale to też nie zawsze się spisywało. Jestem początkujący, więc stosuję toporne metody, np. nie wiedziałem, że wstawiając cin w pętli nie muszę robić tablicy. Teraz staram się to usprawniać, bo któryś już raz SPOJ pokazał mi przekroczenie limitu czasu. *) Dziękuję za pomoc i prosiłbym właśnie o pomoc tu: *- https://forum.pasja-informatyki.pl/284555/problem-z-obliczaniem-liczby

Podobne pytania

0 głosów
1 odpowiedź 157 wizyt
pytanie zadane 24 sierpnia 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
0 odpowiedzi 270 wizyt
pytanie zadane 21 listopada 2017 w SPOJ przez MateuszStawski Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 476 wizyt
pytanie zadane 4 marca 2016 w C i C++ przez dartespl Użytkownik (830 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...