Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczba krzeseł, które zmieszczą się pod stołem.

Ostatnio zmodyfikowano 2017-06-14 17:57
Autor Wiadomość
bartinio07
Temat założony przez niniejszego użytkownika
Liczba krzeseł, które zmieszczą się pod stołem.
» 2017-06-11 18:23:45
Witam, mam problem z zadaniem:
Bajtazar kupuje meble przez Internet. Znalazł już ładny stół i zestaw krzeseł. Teraz zastanawia się, ile krzeseł
może kupić, tak aby wszystkie zmieściły się przy stole.
Stół ma prostokątny blat o wymiarach A × B centymetrów. Z kolei siedzisko krzesła, patrząc z góry, to
kwadrat o wymiarach K × K centymetrów. Dalej będziemy traktować stół jako prostokąt, a krzesła – jako
kwadraty.
Nad jednym z brzegów siedziska (kwadratu) znajduje się oparcie. Każde krzesło należy ustawić oparciem
przy stole, tzn. brzeg z oparciem powinien pokrywać się z pewnym brzegiem stołu. Ponadto siedzisko powinno
w całości znajdować się pod blatem. Oczywiście żadne dwa krzesła nie mogą na siebie nachodzić. W naszych
rozważaniach pomijamy nogi od stołu (możemy założyć, że są nieskończenie cienkie i znajdują się w rogach
blatu). Ile krzeseł zmieści się pod stołem?
Wejście
W jedynym wierszu wejścia znajdują się trzy liczby całkowite A, B i K (1 ≤ A, B, K ≤ 500 000 000) oddzielone
pojedynczymi odstępami, oznaczające, odpowiednio, wymiary blatu stołu oraz wymiar siedziska krzesła.
Wyjście
Twój program powinien wypisać na wyjście maksymalną liczbę krzeseł, które zmieszczą się przy stole.

Napisałem coś takiego:
C/C++
#include <iostream>
using namespace std;
int main()
{
    unsigned int A, B, K;
    cin >> A >> B >> K;
    if( A < K || B < K )
         cout << "0";
   
    if( A < 2 * K || B < 2 * K )
         cout <<( A / K * 2 ) +(( B - 2 * K ) / K );
    else
         cout <<( A / K * 2 ) +(( B - 2 * K ) / K * 2 );
   
    return 0;
}

Program działa, ale nie do końca dobrze, nie przechodzi kilku testów:
1c wiersz 1: wczytano '02147483646', a oczekiwano '0'
1d wiersz 1: wczytano '1431655771', a oczekiwano '3'
3a wiersz 1: wczytano '122713605', a oczekiwano '127'
4a wiersz 1: wczytano '38009446', a oczekiwano '443'
4c wiersz 1: wczytano '736585', a oczekiwano '6'
5b wiersz 1: wczytano '1572', a oczekiwano '3140'
7c wiersz 1: wczytano '08769', a oczekiwano '0'
8d wiersz 1: wczytano '402', a oczekiwano '800'
9a wiersz 1: wczytano '999999999', a oczekiwano '500000000'
9b wiersz 1: wczytano '09', a oczekiwano '0'
10a wiersz 1: wczytano '9', a oczekiwano '1'

Myślę, że trzeba by uwzględnić jeszcze jakiś warunek, bo np. dla danych wejściowych 4 4 4 nie wyświetla prawidłowej odpowiedzi. Mógłby ktoś podpowiedzieć?
P-162390
carlosmay
» 2017-06-11 19:13:52
Samemu podawaj skrajne dane jakie może testować automat.
Takie dane:
- dla jakich krzesła mieszczą się tylko przy jednym boku.
- dla jakich nie mieszczą się krzesła.
- dla jakich mieszczą się tylko po jednym krześle na przeciwko i tylko z jednej strony przy dłuższym boku.
- dla jakich krzesła mieszczą się przy każdym boku.
Rozrysuj na kartce wszystkie przypadki, a zobaczysz potrzebny algorytm.

P-162391
bartinio07
Temat założony przez niniejszego użytkownika
» 2017-06-14 17:57:07
Rozrysowałem sobie i wyszło mi tak:
- krzesła nie mieszczą się, jeśli A < K i B < K (czyli wynikiem będzie 0)
- jeśli A <= 2*K i B <= 2*K, to zmieści się tylko 1 krzesło
- jeśli A lub B <= 2*K, to krzesła zmieszczą się tylko po jednej stronie (jeśli A > B, to ustawiamy po stronie A, a jeśli A < B, to po stronie B, żeby zmieścić jak najwięcej krzeseł)
- jeśli A i B >= 3*K, to krzesła zmieszczą się z każdej strony
Jeszcze o czymś zapomniałem?
P-162545
« 1 »
  Strona 1 z 1