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

dwa prostopadłościany - polski SPOJ

0 głosów
860 wizyt
pytanie zadane 13 stycznia 2021 w C i C++ przez KayTeeTurien Nowicjusz (220 p.)
Witam, mam mały problem z zadaniem https://pl.spoj.com/problems/WWO_01_10/
Próbowałem to zrobić poprzez policzenie pól ścian tych dwóch prostopadłościanów (xy, xz, yz po dwie partie dla każdej figury) i podstawiałem pod warunki. Jeśli kolejne pole jest mniejsze/równe od każdego pola z większego prostopadłościanu to wypisuje tak, a jeśli nie to nie. No i wszystko niby działa, ale sędzia na końcu wywala że błąd.
No i właśnie taki problem, próbowałem jeszcze inną metodą, ale to jeszcze gorzej szło. Więc utknąłem...
Z góry dzięki za odp. <3

1 odpowiedź

0 głosów
odpowiedź 13 stycznia 2021 przez Whistleroosh Maniak (57,400 p.)
Żeby jeden prostopadłościan zmieścił się w drugim to wystarczy, aby każdy wymiar w jednym prostopadłościanie był mniejszy/równy odpowiadającemu wymiarowi w drugim prostopadłościanie. Czyli jeżeli jeden prostopadłościan ma wymiary x_1, y_1, z_1, a drugi x_2, y_2, z_2 to musi zachodzić:

x_1 <= x_2

y_1 <= y_2

z_1 <= z_2

Teraz można zauważyć, że x_1 można ustawić na min(a, b, c), gdzie a, b, c to wymiary podane na wejściu, z_1 można ustawić na max(a, b, c) i y_1 na wymiar, który nie został wcześniej przypisany. Analogicznie należy postąpić dla drugiego prostopadłościanu.

Potem należy jeszcze odwrócić powyższe zależności i sprawdzić czy x_1 >= x_2 i y_1 >= y_2 i z_1 >= z_3
komentarz 13 stycznia 2021 przez tmar1212 Bywalec (2,600 p.)
Na pewno wystarczy? A weźmy takie prostokąty:

2, 2, 12

10, 10, 2

Pierwszy mieści się w drugim, chociaż max ma większe.
komentarz 13 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)

W jaki sposób pierwszy ma się zmieścić w drugim, skoro jego 3 wymiar jest większy niż jakikolwiek wymiar 2? (Chyba, że na przekątną? Ale jeśli tak, to stawiam, że zapis "[...]  można całkowicie włożyć w drugi. " wyklucza taki przypadek)

komentarz 13 stycznia 2021 przez KayTeeTurien Nowicjusz (220 p.)
Już wiem w czym jest problem, (rozwiązanie podane przez Whistleroosh jest teoretycznie poprawne, sam je wykonalem praktycznie na początku problemu, jednak..  ) sześcian może być obkręcony wokół swojej dowolnej osi. Należy więc obliczyć przekątne boków, a także całej figury. po dołożeniu tych warunków program powinien działać.
komentarz 13 stycznia 2021 przez Whistleroosh Maniak (57,400 p.)
Wysłałem to zadanie na SPOJa i moje warunki wystarczą aby dostać AC. Rzeczywiście mogą być przypadki, gdy prostopadłościan trzeba obrócić aby się zmieścił, ale to byłoby dużo trudniejsze do rozwiązania i wymagałoby dużo zabawy z matematyką. Zadania na SPOJu są często kiepsko opisane, więc może być też tak, że w zadaniu założyli, że nie można obracać figur tylko o tym nie napisali
komentarz 17 marca 2023 przez skyynet Początkujący (410 p.)

Mógłby ktoś mi pomóc w rozwiązaniu tego zadania?

Wydaje mi się że warunki są dobre, ale i tak pokazuję błędną odpowiedź. Kod w Javie:

import java.util.Scanner;

class Dwa_prostopadlosciany
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int[][] edge = new int[2][3];
        for(int i = 0; i < 2 ; i++)
        {
            for(int j = 0; j < 3 ; j++)
                edge[i][j] = input.nextInt();
        }
        if(edge[0][0] < edge[1][0] || edge[0][1] < edge[1][1] || edge[0][2] < edge[1][2])
        {
            if(edge[0][0] <= edge[1][0] && edge[0][1] <= edge[1][1] && edge[0][2] <= edge[1][2])
                System.out.println("tak");
            else 
                System.out.println("nie");
        }
        else if(edge[0][0] > edge[1][0] || edge[0][1] > edge[1][1] || edge[0][2] > edge[1][2])
        {
            if(edge[0][0] >= edge[1][0] && edge[0][1] >= edge[1][1] && edge[0][2] >= edge[1][2])
                System.out.println("tak");
            else 
                System.out.println("nie");
        }
        else 
            System.out.println("nie");
        input.close();
    }
}

 

Podobne pytania

0 głosów
1 odpowiedź 815 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez janio11 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 720 wizyt
pytanie zadane 17 sierpnia 2020 w SPOJ przez niezalogowany
0 głosów
0 odpowiedzi 595 wizyt
pytanie zadane 21 lutego 2017 w C i C++ przez juras94 Początkujący (440 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...