IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
description
Transcript of IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
IV OTWARTE MISTRZOSTWA OPOLAW PROGRAMOWANIU ZESPOŁOWYM
OMÓWIENIE ZADAŃ
Problem B – Wędrujący klocek
Pozycja 2 Pozycja 3
3 pozycje x 4 kierunki = 12 wariantów
Cechy klocka:• Pozycja• Położenie, np. lewy, dolny róg
Cechy trasy:• Pola odwiedzone przez klocek
Ruch:• Cztery możliwości
Pozycja 1
Problem B – Wędrujący klocek
Pozycja 2 Pozycja 3Pozycja 1
Pozycja 1
Pozycja 2
Pozycja 3
W, x-=dl_klE, x++
N, y++
S, y-=dl_kl
N, y++
S, y- -W, x- -
E, x+=dl_kl
W, x- -
E, x++
S, y- -N, y+=dl_kl
Kolejny ruch:• Wyznacz nową pozycję• Wyznacz nowe położenie klocka• Dodaj zajmowane przez klocek pola do listy pól odwiedzonych
Ile razy najczęściej klocek znajdował się na jednym polu?Listę odwiedzonych pół przeszukujemy w czasie kwadratowym szukając współrzędnych, które występują najczęściej
Problem C – Zagnieżdżone podzbiory
Gramatyka bezkontekstowa definiująca zagnieżdżony zbiór liczb naturalnych:
Produkcje gramatykiL { E D ListaE N | L Element listyD , E D |} Rozwinięcie listyN NC | C Liczba naturalnaC 0 | 1 | 2 | … | 9 Cyfra
{1,2,{3,4,{5,6},7,8}} Przykładowe słowo realizowane przez gramatykę
A B C A(){ B()
C()}
A B | C
A(){ Jeżeli (Pierwszy symbol (B) = s1)
B()W przeciwnym wypadku jeżeli (Pierwszy symbol (C) = s2 )
C()W przeciwnym wypadku
Błędne słowo}
A s A(){ Jeżeli (symbol = s)
Czytaj kolejny symbolW przeciwnym wypadku
Błędne słowo}
Reguły konstrukcji parsera dla gramatyk bezkontekstowych:
Problem C – Zagnieżdżone podzbiory
Reguły realizacji parsera tej gramatyki – konstrukcja funkcji odpowiadających poszczególnym produkcjom
Lista() L { E D{ Jeżeli (symbol = { )
Czytaj kolejny symbolW przeciwnym razie
Błędne słowoElement_listy()Rozwinięcie_listy()
}
Element_listy() E N | L{ Jeżeli (symbol = { )
Lista()w przeciwnym razie jeżeli (Liczba naturalna)
Przeczytaj tę liczbęw przeciwnym razie
Błędne słowo}
Problem C – Zagnieżdżone podzbiory
Rozwinięcie_listy() D , E D |}{ Jeżeli (symbol = , )
Czytaj kolejny symbolElement_listy()Rozwinięcie_listy()
w przeciwnym razie jeżeli (symbol = } ) Czytaj kolejny symbol
w przeciwnym razie Błędne słowo
}
Analizuj_słowo(){ Czytaj pierwszy symbol
Lista()Jeżeli (przeczytane są wszystkie symbole)
Poprawne słowow przeciwnym razie
Błędne słowo}
Problem A – Terytorium
Niech AMN będzie tablicą, w której
1. Jeżeli działka na pozycji (i, j) jest wolna, to A[i, j] = maksymalna powierzchnia wolnego prostokąta o wysokości 1 i skrajnej prawej działce na pozycji (i, j).
2. Jeżeli działka na pozycji (i, j) jest zajęta, to A[i, j] = 0.
A =
210432121021010104321102100021032100021021
Mając tablicę A łatwo możemy wyznaczyć maksymalny wolny obszar prostokątny o narożniku na pozycji (i, j).
Wszystko można robić równocześnie z wczytywaniem danych .
Złożoność O(M2N). Jest możliwa optymalizacja ze względu na kolejność M i N.
Problem D – Cięcie kwadratu
A(0,0) B(N,0)
C(N,N)D(0,N)
E(N,yE)
F(xF,N)AE = [N; yE] ; EF = [xF – N; N – yE]
AE EF N(xF – N) + yE(N – yE) = 0
skąd:
xF = N – yE + yE2/N
i zadanie już nie jest geometryczne.
Szukamy odpowiedzi na pytanie: dla jakich całkowitych i (1 ≤ i ≤ N – 1) wyrażenie i2/N jest całkowite?
mkm
kk pppN 2121
rpppimk
m
kk
222
21
21
Jeżeli N ma następujący rozkład na czynniki pierwsze:
to i musi być postaci:
Odpowiedzią jest
8(r – 1)
Problem E – Wielokąty kratowe
Z twierdzenia Picka : W = P – B/2 +1
Wystarczy obliczyć:
a) pole P wielokąta
b) liczbę B punktów kratowych na brzegu wielokąta
1
0112
1n
iiiii yxyxP
1
011 ,
n
iiiii yyxxNWDB
Uwaga! Wartości iloczynów xiyi+1 lub xi+1yi mogą przekraczać zakres typu long.
Problem F – Jak dojechać?
Szukamy takiego v aby:
(av4 + bv3 + cv2 + dv) * (s / v) = m
tzn. szukamy miejsca zerowego funkcji
f(v) = s(av3 + bv2 + cv + d) – m
Można zastosować dowolną metodę, np.
a) bisekcji;
b) Newtona.
Problem G – Nieuczciwa gra
Załóżmy, że A1 < A2 < A3 oraz B1 < B2
Tylko poniższe przypadki pozwalają zawsze wygrać:
1. A1 < A2 < A3 < B1 < B2 - trzecią kartą może być najniższa spośród pozostałych w talii
2. A1 < B1 < A2 < A3 < B2 - wybieramy najniższą większą od A3 (nie istnieje, gdy A3=51)
3. B1 < A1 < A2 < A3 < B2 - jw.
4. A1 < A2 < B1 < A3 < B2 - wybieramy najniższą większą od A2 (nie istnieje, gdy A2=49)
5. A1 < A2 < B1 < B2 < A3 - jw.
Problem H – Krecia robota
Jeśli kopczyki są wierzchołkami grafu, a tunele je łączące – krawędziami, to taki grafjest drzewem.
Wniosek: najkrótsza droga jest jedyną drogą łączącą dowolne dwa wierzchołki.
Kopczyk poprzedzający nowoutworzony kopczyk możemy nazwać jego rodzicem.
Zadanie sprowadza się do znalezienia wspólnego przodka wierzchołków S i T.
Sposób numerowania wierzchołków (w grafie skierowanym odpowiada to posortowaniu topologicznemu) pozwala na prosty zapis algorytmu, którego główna część ma postać:
if(A[S]<A[T]) {dist+=L[T]; T=A[T]; }else {dist+=L[S]; S=A[S]; }
Złożoność O(m) , gdzie m – liczba krawędzi. 0
12
4
3
5
8
2
3
9
7