QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 150

#9099. Polígono

Statistics

Considere um polígono $P$ com lados horizontais e verticais e $N$ vértices. Seus lados só podem se encontrar nas extremidades, e em cada vértice encontram-se exatamente duas extremidades de lados. Ao percorrer os lados de $P$ no sentido anti-horário, viramos à esquerda ou à direita em cada vértice. Representamos uma virada à esquerda por $L$ e à direita por $R$. Assim, uma string de $L$ e $R$ representa o polígono. Por exemplo, o polígono da figura 1 é representado por

$LLRLLRRLLRLLRLLRRLLR$

Ao representar um polígono por uma string, sempre começamos na extremidade superior do lado mais à esquerda. Esse caractere é sempre $L$.

problem_9099_f6132c9007fa1c696efb4275f29cdf94.png

Figuras 1 e 2

Um polígono representado pela string dada deve satisfazer a seguinte condição: para qualquer reta vertical $V$, há no máximo duas interseções de $V$ com os interiores dos lados horizontais do polígono (excluindo suas extremidades).

Para um polígono $P$, seja $B(P)$ o menor retângulo com lados horizontais e verticais que contém $P$. Ele é determinado pelas retas verticais e horizontais que coincidem com os lados mais à esquerda, à direita, acima e abaixo de $P$ (figura 2).

Dada uma string de comprimento $N$ composta por $L$ e $R$, desenhamos um polígono $P$ representado por ela que satisfaz a condição acima. O comprimento de cada lado de $P$ deve ser inteiro. Escreva um programa que minimize a área de $B(P)$ e imprima esse mínimo.

Você deve implementar a seguinte função para o avaliador.

int polygon(string S);

A função recebe uma string $S$ de comprimento $N$, cujos caracteres são $L$ ou $R$. Entre os polígonos $P$ representados por $S$, encontre um que minimize a área de $B(P)$ e retorne essa área.

Detalhes de implementação

Envie exatamente um arquivo chamado polygon.c ou polygon.cpp. Ele deve implementar a seguinte função.

int polygon(string S);

A função deve funcionar conforme descrito acima. Você pode criar outras funções para uso interno. O código enviado não deve realizar entrada/saída nem acessar outros arquivos.

Avaliador de exemplo

O avaliador fornecido lê a entrada no seguinte formato.

  • Linha 1: $N$ (o comprimento da string).

  • Linha 2: uma string $c_1c_2\cdots c_N$ de comprimento $N$ ($c_1=L$, e $c_i=L$ ou $R$ para $2\le i\le N$).

O avaliador fornecido imprime o valor retornado por polygon.

Restrições

  • A string de entrada é composta por $L$ e $R$.

  • Sempre existe pelo menos um polígono representado pela string de entrada que satisfaz as condições acima.

  • $4 \le N \le 800$.

Subtarefas

1 (20 pontos)

  • $N \le 10$.

2 (36 pontos)

  • $N \le 40$.

3 (21 pontos)

  • $N \le 100$.

4 (73 pontos)

  • Sem restrições adicionais.

Exemplos

Entrada 1

8
LLLRRLLL

Saída 1

6

Entrada 2

20
LLRLLRRLLRLLRLLRRLLR

Saída 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.