Repositório de códigos e notas para programação competitiva do BRUTE UDESC.
Codigos/– Implementações em C++ organizadas por tema. Cada diretório possui umREADME.mdcom notas rápidas e o(s) arquivo(s).cppcorrespondentes.LaTeX/– Fontes do Almanaque. O arquivomain.texé gerado automaticamente a partir da estrutura emchapters/<prefixo>-<tema>/index.tex. As configurações ficam empreamble.texe na pastaconfigs/.PDF/– Resultado compilado (Almanaque.pdf) e omain.texutilizado na última geração.docs/readme_intro.md– Template usado pelo script para atualizar este README (não editarREADME.mddiretamente)..github/– Scripts auxiliares (.github/scripts/pdfer.py) e workflows que automatizam a geração do PDF.
- Faça fork e crie uma branch com seu tópico.
- Formate os arquivos C++ com o
.clang-formatdo repositório:Para aplicar em todos osclang-format -i -style=FILE Codigos/.../arquivo.cpp.cpp:find Codigos/ -type f -name "*.cpp" -exec clang-format -style=FILE -i {} \; - Abra o Pull Request descrevendo as mudanças relevantes. O PDF e o
README.mdserão atualizados automaticamente via GitHub Actions após o merge.
Sempre que o pdfer.py roda (localmente ou no GitHub Actions) ele reescreve o README com base no template em docs/readme_intro.md e na árvore de diretórios em Codigos/. Se precisar alterar instruções permanentes, edite docs/readme_intro.md e gere novamente o PDF (ou execute python3 .github/scripts/pdfer.py) para refletir no README.md.
O workflow .github/workflows/generate_almanaque_pdf.yml é a forma padrão de atualizar o PDF. Ele roda a cada push na branch main (ou manualmente via workflow dispatch), recompila o Almanaque com as dependências LaTeX necessárias e abre um PR automático (chore: Atualiza o PDF) com o PDF e o main.tex atualizados.
Para gerar localmente com o mesmo stack de dependências do CI:
make pdf
O comando constrói (ou reaproveita) a imagem almanaque-latex:latest, monta o repositório em /workspace e roda .github/scripts/pdfer.py. Variáveis úteis:
CONTAINER_ENGINE(padrãopodman) – altere paradockerse preferir.BASE_IMAGE– imagem base usada no build (padrãopython:3.11-slim).LATEX_IMAGE– nome/tag da imagem local.
Outros alvos disponíveis:
make latex-image # só constrói/atualiza a imagem
make container-shell # abre um shell interativo dentro da imagem
make generate # roda o pdfer.py na máquina local (requer LaTeX instalado)
Se preferir instalar as dependências manualmente:
sudo apt install texlive-latex-base texlive-latex-recommended \
texlive-latex-extra texlive-fonts-recommended \
texlive-lang-portuguese latexmk lmodern cm-super rubber
python3 .github/scripts/pdfer.py
O script regenera LaTeX/main.tex, compila Almanaque.pdf e atualiza o README com a nova árvore de conteúdos.
- A pasta
LaTeX/chapters/é organizada por tema (NN-nome/index.tex), ondeNNcontrola a ordem no PDF. - Cada
index.texdo capítulo usa\input{...}para incluir as seções do tema. - Arquivos de configuração comuns:
configs/packages.tex– pacotes LaTeX, geometria da página e macros globais.configs/titlesec.tex– espaçamentos compactos de títulos.configs/listings.tex– estilo dos blocos de código.
- Disjoint Set Union
- Fenwick Tree
- Implicit Treap
- Interval Tree
- LiChao Tree
- Merge Sort Tree
- Operation Deque
- Operation Queue
- Operation Stack
- Ordered Set
- Segment Tree
- Sparse Table
- Treap
- XOR Trie
- 2 SAT
- Binary Lifting
- Block Cut Tree
- Caminho Euleriano
- Centro e Diametro
- Centroids
- Ciclos
- Fluxo
- HLD
- Inverse Graph
- Kosaraju
- Kruskal
- LCA
- Matching
- Pontes
- Pontos de Articulacao
- Shortest Paths
- Stoer–Wagner Min Cut
- Virtual Tree
- Continued Fractions
- Convolução
- Discrete Root
- Eliminação Gaussiana
- Exponenciação Modular Rápida
- FFT
- Fatoração e Primos
- Floor Values
- Floor and Mod Sum of Arithmetic Progressions
- GCD
- Inverso Modular
- NTT
- Polinomios
- SMAWCK
- Teorema do Resto Chinês
- Totiente de Euler
- XOR Gauss