QOJ.ac

QOJ

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

#9094. Cabras

Statistics

Hay $N$ cabras dispersas en una amplia llanura, pastando tranquilamente. No hay dos en la misma posición. Son perezosas: no se desplazan y solo giran a veces sobre sí mismas. En realidad, todas son robots que no pueden caminar, sino únicamente girar en su sitio. Sus narices son luces LED que pueden encenderse a distancia, y sus ojos son cámaras de alto rendimiento cuyas imágenes pueden verse remotamente en tiempo real y guardarse. Una cabra ve su propia nariz. Sus ojos también permiten ver a través de otras cabras, por lo que puede saber cuántas hay aunque se superpongan en la imagen. Su campo de visión horizontal es de $180^\circ$, incluyendo sus límites.

Según las posiciones, algunas cabras pueden ver las $N$ cabras a la vez y otras no pueden hacerlo en ninguna dirección. Por ejemplo, con las seis cabras numeradas de $0$ a $5$ de la figura, la cabra $5$ ve las seis simultáneamente, pero la $2$ no puede hacerlo por mucho que cambie la dirección de su mirada.

problem_9094_3e7f1c9d72fd52aec761b82b291e749c.png

Para un experimento especial, se eligen dos cabras distintas que puedan ver, cada una, las $N$ cabras a la vez, y una cabra cualquiera de las restantes. Se encienden las narices de las tres elegidas para identificar su posición desde cualquier lugar. Se observan las imágenes de sus ojos y se guarda, para cada cabra elegida, una escena en la que las tres cabras iluminadas aparezcan en el mismo encuadre. Se examinan las tres escenas una por una. En cada una se marcan especialmente las tres cabras iluminadas y todas las cabras situadas entre las otras dos cabras iluminadas, incluidos los límites. El objetivo es contar cuántas de las $N$ cabras reciben una marca en las tres escenas.

Por ejemplo, si las tres elegidas entre las seis se representan con puntos rojos, las figuras siguientes muestran las cabras marcadas desde el punto de vista de cada cabra elegida. (Las figuras no son las escenas guardadas.) En este caso, $4$ cabras reciben las tres marcas.

problem_9094_a01c79d3ce673dc14db41d29aff05105.png

Debes implementar las siguientes dos funciones para el experimento.

  • void init( int x[], int y[] ): Se llama primero y exactamente una vez. Los arreglos (vectores) x e y tienen tamaño $N$. Los argumentos x[0..N-1] e y[0..N-1] dan las coordenadas $x$ e $y$ de las cabras. La cabra $i$ ($0\le i\le N-1$) está en (x[i], y[i]).
  • int count( int a, int b, int c ): Usando las coordenadas (x[a], y[a]), (x[b], y[b]) y (x[c], y[c]) de las tres cabras dadas, calcula y devuelve el número de cabras marcadas las tres veces.

Detalles de implementación

Debes enviar un único archivo llamado goat.cpp que implemente las siguientes funciones.

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

Las funciones deben comportarse como se ha descrito. Puedes definir otras funciones para uso interno. El código enviado no debe realizar entrada/salida ni acceder a otros archivos.

Evaluador de ejemplo

El evaluador proporcionado lee la entrada con el siguiente formato.

  • Primera línea: $N\ Q$, donde $N$ es el número de cabras y $Q$ el número de consultas.
  • Cada una de las siguientes $N$ líneas: $x\ y$, las coordenadas $x$ e $y$ de una cabra.
  • Cada una de las siguientes $Q$ líneas: $a\ b\ c$ ($a,b,c$), los índices de las tres cabras, con $0\le a,b,c\le N-1$.

Para cada consulta, el evaluador imprime en una línea independiente el número de cabras que cumplen la condición.

Restricciones

  • $3\le N\le 3000$
  • $1\le Q\le 5\times10^6$
  • Las coordenadas $x$ e $y$ de todas las cabras están entre $0$ y $10^9$, inclusive.

Subtareas

1 (5 puntos)

  • $N\le 500$, $Q\le 10^5$
  • No hay tres puntos colineales.

2 (17 puntos)

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

3 (10 puntos)

  • $N\le 500$
  • No hay tres puntos colineales.

4 (8 puntos)

  • $N\le 500$

5 (29 puntos)

  • No hay tres puntos colineales.

6 (31 puntos)

  • Sin restricciones adicionales.

Ejemplos

Entrada 1

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

Salida 1

4
4
3

A continuación se muestran, en orden, las llamadas a funciones y sus resultados para el ejemplo 1.

Llamada a función Resultado
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.