Jak dla mnie jakieś dziwne to twoje myślęnie, żeby nie napisać głupie czy złe.
A niby jeszcze nie zaczęliśmy? A niby co sam zrobiłeś parę postów wyżej? Twój kod wymaga tylko bardzo małej poprawki - usunięcia jednego znaku w kodzie i już AC.
Czemu o zgrozo. Czy to nie byłoby lepiej i nie lepsza lektóra do czytania, niż ciągłe czytanie: co kto + błędny i brzydki kod? Lub ciągłe pytania jak wkleić kod do wiadomości na forum.
Zagmatwanie jest tylko i wyłącznie z tego powodu, że wyżej wkleiłeś kod, który wprost, po rozgmatwaniu mojej podpowiedzi daje AC.
Tylko tak Ci się wydaje. Jak wyżej. Twój kod nie pozwala mi ustalić i rozgmatwać podpowiedzi.
Myślę, że lepiej, aby ludzie myśleli. Sami. A nie uczyli się, że rozwiązania zadań są na forum.
Zadania tracą sens, gdy polegają na kopiowaniu rozwiązań z forum, bo przestają być zadaniami.
I właśnie status quo powinien zostać dla potomnych. Aktualnie zagadka została rozgmatwan...
Ok. Właśnie ustaliliśmy co zrobić, aby zaliczyć to zadanie. Skopiować kod i zamienić nierówność na ostrą (bo po informacji o usunięciu jednego znaku każdy to wymyśli).
W efekcie ciekawe i nienajprostsze (jak na łatwe) zadanie zamiast uczyć ludzi myślenia i wyszukiwania odpowiedzi poza najbardziej oczywistymi źródłami (forum) pokazuje, że zadania z algorytmiki to sztuka kopiowania gotowców, a gotowce znjdują się (nawet) na forum.
Może zamiast uczyć ludzi, że geometria wymaga siedzenia z kartką papieru oraz ołówkiem, a także cierpliwości i myślenia (mówię o osobach, które nie wiedziały od razu jak rozwiązać to zadanie niezależnie od tego, jaka była tego przyczyna) pokażemy im, że geometria to sztuka szukania gotowych rozwiązań w sieci?
Jak wolisz - podobało mi się to, że zadanie było nietrywialne i czegoś mnie nauczyło, np. nie opierania się w sposób bezmyślny na gotowcach. Obecnie stanowi ono żywy dowód, że zamiast myśleć nad rozwiązaniem lepiej szukać rozwiązań w sieci bo zajmuje to dużo mniej czasu. A przynajmniej ja utwierdziłbym się w przekonaniu, że SPOJ polega na googlowaniu rozwiązań, co swojego czasu robiłem będąc przekonanym o słuszności tego postępowania. O zgrozo do znalezienia solucji wystarczy wejść na forum SPOJa...
I temu byłem za przerwaniem dyskusji, która musiała skończyć się w taki sposób.
@narbej chciałbym widzieć te Twoje wyprowadzenia wzoru… Bardzo Cie szanuję za ogromną wiedzę z programowania. Naprawdę. Ale nie pisz bzdur że wziąłeś ołówek i papier i tak sobie wyprowadziłeś podobny wzór. W dodatku jak sam twierdzisz nie jesteś matematykiem. A szybciej to policzyłeś niż ten Carver… Dostałem przed chwilą AC więc już nie drążę tematu. Pozdrawiam
Rozumiem że autorowi chodziło chyba o coś zupełnie innego ale może niech sprecyzuje o co bo ja nie mam pojęcia. Zamiast układać algorytmy to mamy do rozwiązania zagadki z dziedziny absurdu.
Przecież nikt nie każe tego robić, chcesz to rozwiązujesz zadanie, nie to nie. Jeżeli nie podobają się zadania na SPOJ’u, to nikt nie broni wymyślenia swoich, lepszych i wstawienia ich tutaj.
Może nie chodzi tu o wymyślenie jakiegoś szczególnie finezyjnego algorytmu, ale autor nie owija w bawełnę i [wyraźnie] pyta, czy można drugi prostokąt na płaszczyźnie ustawić w taki sposób… Na płaszczyźnie figry płaskie, jak wiadomo, nawet nie będąc matematykiem, można przesuwać i obracać. A potem wystarczy już tylko twierdzenie Pitagorasa, podobieństwo trójkątów, linijka … no i może faktycznie, długopis jest czasami lepszy niż ołówek, ale trochę trudniej go wygumkować…To też nie jest jeszcze jakąś wyższą↓ matematyką czy alchemią.
Dlaczego odnosisz się do postu który skasowałem a nie do tego ostatniego? Jakim cudem w ogóle jesteś w stanie czytać skasowany post? Uważasz że to jest tak trywialne że w gimnazjum można to rozwiązać pitagorasem? Ciekawe że sztab matematyków na całym świecie się nad tym głowi latami.
Każdy jest w stanie. Wystarczy kliknąć w historię edycji. Przy okazji odpowiednimi kolorami i przekreśleniem zaznaczone jest to co było usunięte, np. usunięto: “Przepraszam bardzo ale może ktoś napisałby nową treść do tego zadania bo (…)”. Taki diff.
PS dla młodszych
Dlatego uważamy co piszemy w sieci bo przecież nie jesteśmy anonimowi
Nigdy nie byłem w gimnazjum, więc nie wiem. W “moich” czasach nie było. Nie jestem matematykiem, ale to nie znaczy, że jestem humanistą, ale wykształcenia informatycznego też nie mam. Co do wzoru. Matematycy zajmują sie udowadnianiem, a nie tylko wyprowadzeniem wzoru. Ja zadowoliłem się tylko wyprowadzeniem, a dowodem poprawności było AC na SPOJ’u. I nie było to ot takie sobie wzięcie ołówka i papieru i wyprowadzenie potrzebnego wzoru i za pierwszym razem. Było też wcześniej dużo myślenia, kombinowania, poprawiania, rysowania. Między moim pierwszym WA, a pierwszym AC, na mojej liście zgłoszeń do tego zadania jest dużo więcej odstępu czasowego niż jeden dzień, czy tydzień. Jest kilka miesięcy.
Otrzymanie wzoru, to nie jakieś banalne i trywialne wykorzystanie twierdzenia Pitagorasa, a także podobieństwa trójkątów. To ułożenie równania, czy układu równań, a potem odpowiednie ich przekształcenie.
Dobra już nie będę się czepiał bo widzę że sporo nas łączy. W moich czasach też nie było gimnazjum Kończyłem wydział elektryczny na politechnice i tez ani matma ani informatyka…
Dodam tylko na koniec że przyszedłem na spoja aby szlifować technikę programowania C++ oraz JAVY. O ile w C++ pięknie rozwiązuje się tu zadanie to spoj jest bardzo nieprzyjazny dla javy. Wczytywanie danych niewygodne, czas wczytywania zbyt długi, czas obliczeń zbyt długi, użycia pamięci absurdalnie duże…
A druga sprawa jeśli chodzi o same zadania to jak wspominałem przyszedłem ćwiczyć technikę programowania. Jednak spoj nie bardzo się do tego nadaje, bo spoj się skupia raczej na algorytmice niż znajomości jeżyka programowania. Układanie algorytmów też jest bardzo pasjonujące ale raczej takich bardziej przyziemnych zadań gdzie wystarczy 1-2 dni na znalezienie właściwej drogi. A tutaj w dziale “łatwe” każą wymyślić człowiekowi algorytm nad którym profesorowie matematyki siedzieli latami
Istnieją podobne strony do spoja gdzie mierzony jest nie czas wykonania programu (tzn. to też), ale przede wszystkim jego złożoność. Na spoju też mnie często irytuje to, że napiszę coś w Pythonie i “przekroczono limit czasu” - przerzucę algorytm na C++ i nagle wynik się mieści lub nawet jest jednym z lepszych. To też chcąc być wysoko w rankingu spoj narzuca języki oparte na C i koniec (również niektórymi zadaniami, które są zatrzeżone dla C\C++) i nie idzie się tutaj uczyć innego języka.
Taki mój prywatny osąd. Mi to nie przeszkadza (już), ale rozumiem.
Lubię spoja bo jest po polsku. Za moich czasów jedynym słusznym językiem w szkole był rosyjski Wolę teraz poświęcić czas na programowanie niż na zrozumienie treści po angielsku Poza tym jak wypełniałem konto na jakimś innym portalu tego typu to w rubryce gender miałem do wyboru male, female i others… To podziękowałem
Od 5 lat próbuję uzyskać wynik pozytywny… bez skutku…
Próby: pola ✓, obwodu ✓, średnicy ✓, grubości ✓.
Dopasowania pod kątem prostym… Nic nie wchodzi.
Machnąłem nawet ten magiczny wzorek z książki.
Dzięki niemu wchodzą testy {100, 50, 105, 9} i {81, 59, 88, 13}.
Wyprowadziłem nawet wzór na test obrotu pod danym kątem:
// part of solution from the past
double _c, _d, alfa;
alfa = atan2(b, a);
_c = c * sin(alfa) + d * cos(alfa);
_d = c * cos(alfa) + d * sin(alfa);
if( (a > _c && b > _d) ||
(a > _d && b > _c) ) __TAK__;
Ciągle otrzymuję WA i mam wrażenie, że to
zadanie jest zepsute przez przypadki autora.
@narbej a miałem już sprawdzić czego mi brakuje z tego kodu…
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define __TAK__ { cout << "TAK\n"; continue; }
#define __NIE__ { cout << "NIE\n"; continue; }
#define __UND__ { cout << "UND\n"; continue; }
int main()
{
int problems;
cin >> problems;
while ( problems-- )
{
int a, b, c, d;
cin >> a >> b >> c >> d;
// normalisation
if ( a < b ) swap( a, b );
if ( c < d ) swap( c, d );
// basic tests
if ( d < b ) __NIE__;
if ( a == c || b == d ) __NIE__;
if ( a > c && b > d ) __TAK__;
if ( a + b < c + d ) __NIE__;
if ( a * b < c * d ) __NIE__;
// advanced tests
if ( hypot( a, b ) < hypot( c, d ) ) __NIE__;
if ( (double)b/a < (double)d/c ) __NIE__;
// part of solution from the past
double _c, _d, alfa;
alfa = atan2(b, a);
_c = c * sin(alfa) + d * cos(alfa);
_d = c * cos(alfa) + d * sin(alfa);
if( (a > _c && b > _d) ||
(a > _d && b > _c) ) __TAK__;
// mysterious formula from book
{
double x;
x = 2 * a;
x *= c * d;
x /= ( c*c + d*d );
double x_;
x_ = ( c*c - d*d );
x_ *= sqrt( c*c - a*a + d*d );
x_ /= ( c*c + d*d );
x += x_;
if ( c > a && b > x ) __TAK__ else __NIE__;
}
}
}
Z tamtego forum w rozwiązaniu od Satireva
nie rozumiem dlaczego akurat B porównuje
z przyprostokątną mniejszego,
dalej nie przyglądałem się jego rozwiązaniu.
testy (wg mnie) są poprawne, dawno temu zadanie rozwiązałem, wzory wyprowadziłem sam
zaliczyłem w pierwszej próbie po wyprowadzeniu wzorów na położenie ukośne (bo przedtem miałem wiele prób ułożeń równoległych - ale się nie sprawdziły )
wzór, który wyprowadziłem jest inny, niż podany w linku (link pojawił się dużo później) - czy jest równoważny - nigdy nie chciało mi się sprawdzić, tym bardziej, że nie mam notatek, jak go wyprowadziłem a jedynie postać końcową
wyprowadzenie wzoru nie zajęło mi więcej niż 2-3 godziny (bo gdyby było to dłużej, to bym zrezygnował )
nie jest to też pewnie zbyt trudne - wzór Pitagorasa + wzory skróconego mnożenia + dużo uwagi
Jednakże nadal WA, a pomysłów do zaimplementowania, brak.
Mogę spróbować z poszukiwaniem przybliżenia pod jakim kątem ma być ustawione.
Jeśli da się zmieścić prostokąt w pierwszym to powinien istnieć taki kąt pod którym po obróceniu,
jego rzuty proste powinny się mieścić na bokach większego. W dobrą stronę idę?
Mam już te zadanie serdecznie gdzieś.
Napisałem też program, który siłowo uzyskuje rozwiązanie dla pochylenia: –SNAP!– (W odpowiedziach poniżej jest finalna wersja z większą precyzją.)