Tylko 6 osób zrobiło to [trudne?
] zadanie, dawno temu, więc mało prawdopodobne, że się ktoś podzieli, ale dzięki twojemu pytaniu, może teraz zmobilizuje to innych do zmierzenia się z nim.
PS
Co do twojego kodu.
Jeżeli już, to zamiast float, użyłbym double, ale w tym zadaniu jest to moim zdaniem całkowicie zbędne. Wystarczy typ całkowity. Nie musimy obliczać współrzędnych punktu kolizji, a tylko czy taki fakt zaistnieje czy nie. W twojej klasie owad, moim zdaniem ilość kolizji to za mało. Ja dodałbym jeszcze z kim [wektor z nr biedronek]. Wtedy można nawet ewentualnie zrezygnować z ilości, a tą informacją będzie rozmiar vektora. [vector.size() == 0 brak kolizji]. W twoim kodzie jest co najmniej dwukrotne sortowanie, jedno w pętli? więc pewnie dużo więcej. Ja [jak już będę robił] raczej użyję odpowiedniej kolejki
. [i tak pewnie za dużo podpowiadam]. Wykryć kolizję można porównując tylko znak dwóch wyznaczników, jeżeli oba są dodatnie lub ujemne i różne od zera to kolizji na pewno nie ma. Czy jest kolizja, trzeba pewnie [tak myślę] porównać jeszcze odpowiednie znaki następnych 2 wyznaczników. Na początek zakładamy, że wszystkie biedrony startują [są dopuszczone] i odejmujemy po jednej najbardziej kolizyjnej jeżeli takie są. Jest tu pewien haczyk, jak modyfikować, w jaki sposób, kolejkę, ale myślę, że tu trzeba na to samemu wpaść - zresztą mogę się mylić, jeszcze nie mam ani AC ani nawet nie rozpocząłem kodowania.
PS 2
Zamiast:
vector <owad> biedronka;
cin >> ilosc;
biedronka.reserve(ilosc);
można chyba?:
cin >> ilosc;
vector <owad> biedronka(ilosc);
a potem
biedronka[i] = owad(xs, xf, yf); // może całość nie szybciej, ale 'ładniej' i krócej
zamiast:
for (int j = i; j < ilosc; ++j)
{
if ((i != j) && (
można:
for (int j = i + 1; j < ilosc; ++j)
{
if (.... // zbędny warunek (i != j) &&