• 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

Object Storage Arubacloud
0 głosów
445 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 (56,980 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 (56,980 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ź 444 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez janio11 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 366 wizyt
pytanie zadane 17 sierpnia 2020 w SPOJ przez niezalogowany
0 głosów
0 odpowiedzi 359 wizyt
pytanie zadane 21 lutego 2017 w C i C++ przez juras94 Początkujący (440 p.)

92,555 zapytań

141,402 odpowiedzi

319,542 komentarzy

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

...