QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 1024 MB 총점: 150

#9099. Polígono

통계

Considera un polígono $P$ con lados horizontales y verticales y $N$ vértices. Sus lados solo pueden encontrarse en sus extremos, y en cada vértice se encuentran exactamente dos extremos de lados. Al recorrer los lados de $P$ en sentido antihorario, giramos a la izquierda o a la derecha en cada vértice. Representamos un giro a la izquierda con $L$ y uno a la derecha con $R$. Así, una cadena de $L$ y $R$ representa el polígono. Por ejemplo, el polígono de la figura 1 se representa con

$LLRLLRRLLRLLRLLRRLLR$

Al representar un polígono mediante una cadena, se empieza siempre en el extremo superior de su lado más a la izquierda. Este carácter siempre es $L$.

problem_9099_f6132c9007fa1c696efb4275f29cdf94.png

Figuras 1 y 2

Un polígono representado por la cadena dada debe satisfacer la siguiente condición: para cualquier recta vertical $V$, hay como máximo dos intersecciones de $V$ con el interior de los lados horizontales del polígono (excluyendo los extremos).

Para un polígono $P$, sea $B(P)$ el menor rectángulo con lados horizontales y verticales que contiene a $P$. Está determinado por las rectas verticales y horizontales que coinciden con los lados más a la izquierda, a la derecha, arriba y abajo de $P$ (figura 2).

Dada una cadena de longitud $N$ formada por $L$ y $R$, dibujamos un polígono $P$ representado por ella que cumpla la condición anterior. La longitud de cada lado de $P$ debe ser entera. Escribe un programa que minimice el área de $B(P)$ y muestre ese mínimo.

Debes implementar la siguiente función para el evaluador.

int polygon(string S);

La función recibe una cadena $S$ de longitud $N$, cuyos caracteres son $L$ o $R$. Entre los polígonos $P$ representados por $S$, encuentra uno que minimice el área de $B(P)$ y devuelve dicha área.

Detalles de implementación

Debes enviar exactamente un archivo llamado polygon.c o polygon.cpp, que implemente la siguiente función.

int polygon(string S);

La función debe comportarse como se describió antes. Puedes crear 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 en el siguiente formato.

  • Línea 1: $N$ (la longitud de la cadena).

  • Línea 2: una cadena $c_1c_2\cdots c_N$ de longitud $N$ ($c_1=L$, y $c_i=L$ o $R$ para $2\le i\le N$).

El evaluador proporcionado muestra el valor devuelto por polygon.

Restricciones

  • La cadena de entrada está formada por $L$ y $R$.

  • Siempre existe al menos un polígono representado por la cadena de entrada que satisface las condiciones anteriores.

  • $4 \le N \le 800$.

Subtareas

1 (20 puntos)

  • $N \le 10$.

2 (36 puntos)

  • $N \le 40$.

3 (21 puntos)

  • $N \le 100$.

4 (73 puntos)

  • Sin restricciones adicionales.

Ejemplos

Entrada 1

8
LLLRRLLL

Salida 1

6

Entrada 2

20
LLRLLRRLLRLLRLLRRLLR

Salida 2

15

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.