QOJ.ac

QOJ

Time Limit: 4 s Memory Limit: 1024 MB Total points: 100

#9094. Kozy

Statistics

Na rozległej równinie pasie się $N$ rozproszonych kóz. Żadne dwie nie zajmują tego samego miejsca. Są leniwe: nie przemieszczają się, tylko czasem obracają w miejscu. W rzeczywistości wszystkie są robotami, które nie potrafią chodzić, a jedynie się obracać. Ich nosy to zdalnie zapalane diody LED, a oczy są wydajnymi kamerami. Obraz można zdalnie oglądać na żywo i zapisywać wybrane sceny. Koza widzi własny nos, a dzięki funkcji prześwietlania rozpoznaje liczbę kóz nawet wtedy, gdy nakładają się w obrazie. Poziomy kąt widzenia wynosi $180^\circ$ i obejmuje także jego granicę.

Zależnie od rozmieszczenia niektóre kozy mogą widzieć wszystkie $N$ kóz naraz, a inne nie mogą tego zrobić w żadnym kierunku. Na przykład dla sześciu kóz o numerach od $0$ do $5$ na rysunku koza $5$ widzi wszystkie sześć jednocześnie, ale koza $2$ nie może tego zrobić niezależnie od kierunku patrzenia.

problem_9094_3e7f1c9d72fd52aec761b82b291e749c.png

Do specjalnego eksperymentu wybieramy dwie różne kozy, z których każda może widzieć wszystkie $N$ kóz naraz, oraz dowolną kozę spośród pozostałych. Zapalamy nosy wybranych trzech kóz, aby ich pozycje były rozpoznawalne z dowolnego miejsca. Obserwujemy obrazy z ich oczu i dla każdej zapisujemy jedną scenę, w której wszystkie trzy świecące kozy są widoczne w jednym kadrze. Oglądamy kolejno trzy zapisane sceny. W każdej oznaczamy trzy świecące kozy oraz wszystkie kozy widoczne pomiędzy pozostałymi dwiema świecącymi kozami, wraz z granicami. Celem eksperymentu jest policzenie, ile spośród $N$ kóz otrzymało oznaczenie we wszystkich trzech scenach.

Jeśli na przykład wybrane trzy spośród sześciu kóz oznaczymy czerwonymi punktami, poniższe rysunki pokazują kozy oznaczone z punktu widzenia każdej wybranej kozy. (Rysunki nie są samymi zapisanymi scenami.) W tym przypadku $4$ kozy otrzymują oznaczenie trzykrotnie.

problem_9094_a01c79d3ce673dc14db41d29aff05105.png

Na potrzeby eksperymentu zaimplementuj następujące dwie funkcje.

  • void init( int x[], int y[] ): Funkcja wywoływana jako pierwsza, dokładnie raz. Tablice (wektory) x i y mają rozmiar $N$. Argumenty x[0..N-1] i y[0..N-1] zawierają współrzędne $x$ i $y$ kóz. Koza $i$ ($0\le i\le N-1$) znajduje się w (x[i], y[i]).
  • int count( int a, int b, int c ): Na podstawie współrzędnych (x[a], y[a]), (x[b], y[b]), (x[c], y[c]) trzech podanych kóz oblicza i zwraca liczbę kóz oznaczonych wszystkie trzy razy.

Szczegóły implementacji

Prześlij jeden plik o nazwie goat.cpp, zawierający implementacje następujących funkcji.

void init( int x[], int y[] );
int count( int a, int b, int c );

Funkcje muszą działać zgodnie z opisem. Możesz definiować inne funkcje do użytku wewnętrznego. Przesłany kod nie może wykonywać operacji wejścia/wyjścia ani korzystać z innych plików.

Przykładowy program oceniający

Dostarczony program oceniający czyta wejście w następującym formacie.

  • Pierwszy wiersz: $N\ Q$, gdzie $N$ jest liczbą kóz, a $Q$ liczbą zapytań.
  • Każdy z kolejnych $N$ wierszy: $x\ y$, czyli współrzędne $x$ i $y$ kozy.
  • Każdy z kolejnych $Q$ wierszy: $a\ b\ c$ ($a,b,c$), czyli numery trzech kóz, gdzie $0\le a,b,c\le N-1$.

Dla każdego zapytania program oceniający wypisuje liczbę kóz spełniających warunek w osobnym wierszu.

Ograniczenia

  • $3\le N\le 3000$
  • $1\le Q\le 5\times10^6$
  • Współrzędne $x$ i $y$ wszystkich kóz należą do przedziału od $0$ do $10^9$ włącznie.

Podzadania

1 (5 punktów)

  • $N\le 500$, $Q\le 10^5$
  • Żadne trzy punkty nie są współliniowe.

2 (17 punktów)

  • $N\le 500$, $Q\le 10^5$

3 (10 punktów)

  • $N\le 500$
  • Żadne trzy punkty nie są współliniowe.

4 (8 punktów)

  • $N\le 500$

5 (29 punktów)

  • Żadne trzy punkty nie są współliniowe.

6 (31 punktów)

  • Brak dodatkowych ograniczeń.

Przykład

Wejście 1

6 3
0 0
1 1
2 2
4 3
0 2
2 0
0 5 2
1 3 4
4 1 5

Wyjście 1

4
4
3

Poniżej podano kolejno wywołania funkcji i wyniki dla przykładu 1.

Wywołanie funkcji Wynik
init( {0, 1, 2, 4, 0, 2}, {0, 1, 2, 3, 2, 0} )
count( 0, 5, 2 ) 4
count( 1, 3, 4 ) 4
count( 4, 1, 5 ) 3

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.