Técnicas de Otimização: Algoritmo de Mo para MEX e Padrões de Sequências em C++
Notas de Implementação e Armadilhas em C++
Ao trabalhar com estruturas de dados dinâmicas como o std::vector, é crucial evitar loops que dependam do tamanho atual do container enquanto ele é modificado. Por exemplo, a instrução for (int i = 0; i < (int)v.size(); i++) v.push_back(1); resultará em um loop infinito, pois o limite superior aumen ...
Publicado em 9-18 11:59
Resolução de Problemas com Divisão Binária e Contagem de Inversões
Este problema envolve determinar, para cada segmento de alvo, em qual passo ele é atingido pela primeira vez por uma sequência de tiros. A abordagem ideal emprega divisão binária sobre o tempo, combinada com uma árvore de Fenwick (BIT) para contagem eficiente de tiros dentro de intervalos.
A ideia central é inverter a perspectiva: ao invés de s ...
Publicado em 9-16 09:18
Resolução das Questões A-C do Codeforces Round 911 (Div. 2)
A. Cobirndo com Água
Aálise
O comportamento da água segue uma lógica semelhante à de jogos de sandbox: quando uma célula vazia possui água em ambos os lados, ela é preenchida automaticamente. Com a operação 2, é possível criar um gerador de água infinita. Portanto, ao idantificar três ou mais células vazias consecutivas, basta duas aplicações d ...
Publicado em 8-22 02:10
Estratégias para Problemas de Programação Competitiva: Cobertura, Palíndromos e Grafos Bipartidos
Cobertura de Área em Movimento Sequencial
Para resolver o problema de cobertura dinâmica, observamos que uma nuvem gerada no instante t afeta todos os períodos subsequentes [t+1, N]. A abordagem consiste em monitorar o deslocamento acumulado (deslocX, deslocY) durante a simulação. Em cada passo, verificamos se existe um momento anterior x onde ...
Publicado em 8-17 14:38
Técnicas de Programação Dinâmica e Otimização para Problemas em Intervalos
Neste artigo, exploraremos diversas abordagens algorítmicas, com foco em Programação Dinâmica (PD) de intervalo e estruturas de dados de otimização, aplicadas a problemas clássicos de fusão e corte. A PD de intervalo é uma técnica poderosa para resolver problemas onde a solução ótima de um problema maior pode ser construída a partir de soluções ...
Publicado em 7-27 09:41
Técnicas Avançadas de Programação Competitiva e Resolução de Problemas
Programação Dinâmica em Árvores e Grafos
Construção de Árvores e Fórmula de Cayley Estendida
Para resolver problemas de contagem de árvores geradoras com restrições de componentes conexos, utilizamos a fórmula estendida de Cayley. A abordagem envolve Programação Dinâmica (PD) em árvores, onde o estado dp[u][has_key][size] representa o número de ...
Publicado em 7-23 18:19
Guia Prático de Programação Dinâmica: Padrões e Otimizações
A programação dinâmica divide um problema em fases, representadas por estados, e decide a melhor transição entre eles. Três propriedades são essenciais:
Estado, fase e decisão: o estado resume o passado, a fase indica o progresso e a decisão escolhe a melhor transição.
Sobreposição de subproblemas: a mesma subexpressão aparece repetidamente, p ...
Publicado em 7-13 18:40
Técnicas Avançadas de Otimização em Programação Dinâmica
Aceleração por Matrizes
A otimização via matrizes é fundamental para resolver problemas de recorrência linear em tempo logarítmico. Abaixo, uma implementação base para multiplicação e exponenciação de matrizes quadradas.
#include <iostream>
#include <vector>
#include <cstring>
const int DIM = 3;
struct MatrixContainer {
...
Publicado em 7-3 09:38
Análise e Resolução: AtCoder Regular Contest 113
Problema D - Sky Reflector
Neste problema, trabalhamos com uma matriz de dimensões $n \times m$ onde cada célula contém um valor inteiro entre $1$ e $k$. Definimos $A_i$ como o valor mínimo da linha $i$ e $B_j$ como o valor máximo da coluna $j$. O objetivo é calcular o número de pares distintos de sequências $(A, B)$ que podem ser formados, apl ...
Publicado em 7-1 22:31
Solução para o Problema B: Convolução de Dirichlet k-vezes
Abordagem via Funções Geradoras de Dirichlet
Este problema pode ser resolvido sem utilizar funções geradoras de Dirichlet (DGF), através de combinatória direta. No entanto, a abordagem com DGF oferece uma perspectiva mais elegante e sistemática.
Definição do Operador Derivada
Para uma função aritmética f, definimos sua derivada como:
f'(n) = f( ...
Publicado em 6-21 16:14