feat: new greedy problem formated
This commit is contained in:
5
inclusao-de-subintervalos/statement/description.tex
Normal file
5
inclusao-de-subintervalos/statement/description.tex
Normal file
@@ -0,0 +1,5 @@
|
||||
Seja \( S \) um conjunto de \( n \) intervalos sobre a reta real \( ([l_0, r_0], [l_1, r_1], \ldots, [l_{n-1}, r_{n-1}]) \), de modo que, para todo intervalo \( [l_i, r_i] \), temos \( l_i \le r_i \).
|
||||
|
||||
Dizemos formalmente que um intervalo \( a = [l, r] \) \textbf{cobre} outro intervalo \( b = [l', r'] \) quando \( l \le l' \) e \( r \ge r' \).
|
||||
|
||||
O objetivo é encontrar o menor subconjunto \( S' \subseteq S \) tal que todo intervalo pertencente ao conjunto original \( S \) seja coberto por, pelo menos, um intervalo pertencente a \( S' \). Em outras palavras, você deve selecionar a quantidade mínima de intervalos de \( S \) que, juntos, sejam capazes de conter todos os demais intervalos dados.
|
||||
5
inclusao-de-subintervalos/statement/input.tex
Normal file
5
inclusao-de-subintervalos/statement/input.tex
Normal file
@@ -0,0 +1,5 @@
|
||||
A entrada consiste em duas linhas.
|
||||
|
||||
A primeira linha de cada caso de teste contém um inteiro \( n \) (\( 1 \le n \le 10^5 \)), representando a quantidade de intervalos no conjunto \( S \).
|
||||
|
||||
As próximas \( n \) linhas contêm, cada uma, dois inteiros \( l_i \) e \( r_i \) (\( 1 \le l_i \le r_i \le 10^4 \)), representando o início e o fim de cada intervalo.
|
||||
9
inclusao-de-subintervalos/statement/notes.tex
Normal file
9
inclusao-de-subintervalos/statement/notes.tex
Normal file
@@ -0,0 +1,9 @@
|
||||
No primeiro caso de exemplo, temos os intervalos \(\{ [1, 2], [3, 4], [5, 6] \}\). Como nenhum intervalo está contido em outro (eles são disjuntos), todos os três são necessários para garantir a cobertura de si mesmos. Portanto, a saída é 3.
|
||||
|
||||
No segundo caso, temos os intervalos \(\{ [2, 4], [3, 7], [1, 8], [4, 8] \}\). Note que:
|
||||
\begin{itemize}
|
||||
\item O intervalo \([1, 8]\) cobre o intervalo \([2, 4]\) pois \( 1 \le 2 \) e \( 8 \ge 4 \).
|
||||
\item O intervalo \([1, 8]\) cobre o intervalo \([3, 7]\) pois \( 1 \le 3 \) e \( 8 \ge 7 \).
|
||||
\item O intervalo \([1, 8]\) cobre o intervalo \([4, 8]\) pois \( 1 \le 4 \) e \( 8 \ge 8 \).
|
||||
\end{itemize}
|
||||
Como o intervalo \([1, 8]\) cobre todos os outros e a si mesmo, o menor conjunto \( S' \) possui apenas 1 elemento.
|
||||
1
inclusao-de-subintervalos/statement/output.tex
Normal file
1
inclusao-de-subintervalos/statement/output.tex
Normal file
@@ -0,0 +1 @@
|
||||
Para cada caso de teste, imprima um único inteiro representando o tamanho do menor conjunto \( S' \subseteq S \) que cobre todos os intervalos de \( S \).
|
||||
0
inclusao-de-subintervalos/statement/preamble.tex
Normal file
0
inclusao-de-subintervalos/statement/preamble.tex
Normal file
39
inclusao-de-subintervalos/statement/tutorial.tex
Normal file
39
inclusao-de-subintervalos/statement/tutorial.tex
Normal file
@@ -0,0 +1,39 @@
|
||||
\subsection*{Entendimento do Problema}
|
||||
O problema pede o menor número de intervalos necessários para que todos os outros estejam contidos em pelo menos um dos selecionados. Um intervalo $[l, r]$ cobre $[l', r']$ se, e somente se, $l \le l'$ e $r \ge r'$. Isso significa que intervalos menores ou "internos" são redundantes se houver um intervalo maior que os englobe completamente.
|
||||
|
||||
\subsection*{Estratégia Ótima}
|
||||
A solução consiste em identificar os intervalos "maximais", ou seja, aqueles que não são cobertos por nenhum outro intervalo do conjunto. Se um intervalo não é coberto por ninguém, ele obrigatoriamente deve fazer parte de $S'$. Se ele é coberto por alguém, ele pode ser descartado.
|
||||
|
||||
\subsection*{Algoritmo Passo a Passo}
|
||||
\begin{enumerate}
|
||||
\item \textbf{Ordenação Especial:} Ordene os intervalos $S$ seguindo dois critérios:
|
||||
\begin{itemize}
|
||||
\item Primeiro, pelo ponto de início $l_i$ em ordem crescente.
|
||||
\item Em caso de empate no início ($l_i = l_j$), ordene pelo ponto de fim $r_i$ em ordem \textbf{decrescente}.
|
||||
\end{itemize}
|
||||
\item \textbf{Processamento Linear:} Após a ordenação, o primeiro intervalo da lista sempre será um candidato a $S'$ (pois tem o menor $l$).
|
||||
\item \textbf{Filtragem:} Mantenha uma variável \texttt{max\_r} para rastrear o maior ponto de fim encontrado até agora entre os intervalos que decidimos manter.
|
||||
\begin{itemize}
|
||||
\item Para cada intervalo $[l_i, r_i]$ na lista ordenada:
|
||||
\item Se $r_i > \texttt{max\_r}$, significa que este intervalo não é coberto por nenhum dos anteriores (pois, embora seu $l_i$ seja maior ou igual, seu $r_i$ estende a cobertura atual). Contabilizamos ele e atualizamos \texttt{max\_r}.
|
||||
\item Se $r_i \le \texttt{max\_r}$, este intervalo já está totalmente contido em algum intervalo anterior (que tinha $l \le l_i$ e $r \ge r_i$). Portanto, ele é descartado.
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
|
||||
|
||||
|
||||
\subsection*{Exemplo de Execução}
|
||||
Conjunto: $\{[2, 4], [3, 7], [1, 8], [4, 8]\}$
|
||||
\begin{enumerate}
|
||||
\item \textbf{Após Ordenar:} $[1, 8], [2, 4], [3, 7], [4, 8]$.
|
||||
\item \textbf{Passo 1:} Pega $[1, 8]$. \texttt{max\_r} = 8. (Total = 1).
|
||||
\item \textbf{Passo 2:} $[2, 4]$. Como $4 \le 8$, é redundante.
|
||||
\item \textbf{Passo 3:} $[3, 7]$. Como $7 \le 8$, é redundante.
|
||||
\item \textbf{Passo 4:} $[4, 8]$. Como $8 \le 8$, é redundante.
|
||||
\item \textbf{Resultado:} 1.
|
||||
\end{enumerate}
|
||||
|
||||
\subsection*{Complexidade}
|
||||
\begin{itemize}
|
||||
\item \textbf{Tempo:} $O(N \log N)$ devido à ordenação inicial. A varredura subsequente é $O(N)$.
|
||||
\end{itemize}
|
||||
Reference in New Issue
Block a user