Treino Seleção 2020
O treino do estágio de seleção 2020 será organizado por semanas. Cada
semana terá um tópico a estudar e terá 3 componentes: leituras
recomendadas, resolução de dois a três problemas e uma aula por
vídeo. Para mais informações consultem o regulamento da seleção, que inclui um sumário de cada
semana.
Requisitos
Muitos dos problemas que vos serão propostos são provenientes de
vários online judges disponíveis (repositórios de problemas e
concursos). Como tal é aconselhado que criem uma conta e explorem as
seguintes plataformas: CodeForces;
Kattis.
Além de problemas originais, o CodeForces
incorpora um mini fórum de discussão que contém exposições sobre
vários temas técnicos e não técnicos. É principalmente uma plataforma
de concursos, por isso podem ainda participar nos vários concursos
disponibilizados, quer em tempo real quer virtualmente.
Muitas das leituras que recomendamos são de dois livros:
- Competitive Programmer's Handbook, por Antti Laaksonen, disponível aqui, abreviado como CPH
- Principles of Algorithmic Problem Solving, por Johan Sannemo, disponível aqui, abreviado como PAPS
Devem fazer download de ambos os livros e seguir os capítulos
recomendados em cada tópico.
Listagem de semanas
1. Semana 20/07 a 26/07: Programação dinâmica
Básicos de Programação dinâmica
Leituras recomendadas:
Programação dinâmica em DAG
Leituras recomendadas:
- Livro CPH, Capítulo 16.2 (até 'Extending Dijkstra’s algorithm')
Programação dinâmica em dígitos
Leituras recomendadas:
Programação dinâmica bitmask (EXTRA)
Leituras recomendadas:
Programação dinâmica e combinatória (EXTRA)
Leituras recomendadas:
Problemas do CodeForces (EXTRA)
- Journey, Ronda #374 (Div. 2), Problema C: Resolver aqui
- Vasya and Array, Ronda Educational 56, Problema F: Resolver aqui
- Vladik and Memorable Trip, Ronda #416 (Div. 2), Problema C: Resolver aqui
- Helga Hufflepuff's Cup, Manthan Codefest 17, Problema C: Resolver aqui
- Linear Kingdom Races, Ronda #87, Problema E (Difícil): Resolver aqui
- Kalila and Dimna in the Logging Industry, Ronda #189, Problema C (Muito difícil): Resolver aqui
2. Semana 27/07 a 02/08: Estruturas de dados
Árvores binárias de pesquisa
Leituras recomendadas:
Implementações da STL: priority_queue, set, map, queue/stack, deque
Leituras recomendadas:
Segment trees
Leituras recomendadas:
- Livro PAPS, Capítulo 11.2
Problemas do CodeForces
- Remove Extra One, Ronda #450 (Div. 2), Problema C: Resolver aqui
- Pashmak and Parmida's problem, Ronda #261 (Div. 2), Problema D: Resolver aqui
Outras versões de Segment trees: lazy, 2d (EXTRA)
Leituras recomendadas:
Fenwick trees/BIT (EXTRA)
Leituras recomendadas:
Disjoint Set Union (EXTRA)
Leituras recomendadas:
Problemas do CodeForces (EXTRA)
- Segments Removal, Ronda #452 (Div. 2), Problema E: Resolver aqui
- The Bakery, Ronda #426 (Div. 2), Problema D: Resolver aqui
- Lucky Queries, Ronda #104 (Div. 1), Problema E (Difícil): Resolver aqui
- MEX Queries, Ronda Educational 23, Problema F (Difícil): Resolver aqui
3. Semana 03/08 a 09/08: Grafos
Pesquisas DFS e BFS
Leituras recomendadas:
- Livro CPH, Capítulo 11 (opcional para introdução ao conceito de grafos)
- Livro CPH, Capítulo 12
Algoritmo de Bellman-Ford
Leituras recomendadas:
- Livro PAPS, Capítulo 12.3.2
Algoritmo de Dijkstra
Leituras recomendadas:
- Livro CPH, Capítulo 13, Secção 'Dijkstra's algorithm'
Minimum spanning trees (EXTRA)
Leituras recomendadas:
- Livro CPH, Capítulo 15 (podem saltar a Secção de DSU se já tiverem visto)
Árvore de caminhos mais curtos (EXTRA)
Leituras recomendadas:
Ciclos de Euler (EXTRA)
Leituras recomendadas:
- Livro CPH, Capítulo 19 até 'Hamiltonian path'
Árvore de pontes (EXTRA)
Leituras recomendadas:
Problemas do CodeForces (EXTRA)
- Edges in MST, Ronda #111 (Div. 2), Problema D: Resolver aqui
- Paths and Trees, Ronda #303 (Div. 2), Problema E: Resolver aqui
- Tanya and Password, Ronda #288 (Div. 2), Problema D: Resolver aqui
- Wizard's Tour, Ronda #434 (Div. 2), Problema F (Difícil): Resolver aqui
- Dirty Arkady's Kitchen, Ronda #423 (Div. 1), Problema F (Difícil): Resolver aqui
4. Semana 10/08 a 16/08: Problemas dinâmicos
Técnicas fundamentais
Leituras recomendadas:
- Livro CPH, Capítulo 9.1 (Introdução a problema dinâmicos)
- Livro CPH, Capítulo 9.4
Decomposição SQRT
Leituras recomendadas:
- Livro CPH, Capítulo 27.1 e 27.2 (tudo até Mo's algorithm)
Estrutura de dados Buckets
Leituras recomendadas:
Sparse tables e árvores/Lowest common ancestor (EXTRA)
Leituras recomendadas:
Truque para Segtrees em árvores (EXTRA)
Leituras recomendadas:
Algoritmo de Mo (EXTRA)
Leituras recomendadas:
Mais exemplos (EXTRA)
Leituras recomendadas:
Problemas do CodeForces (EXTRA)
- Till I Collapse, Ronda #406 (Div. 1), Problema C: Resolver aqui
- Powerful array, Ronda 2 Yandex 2011, Problema D: Resolver aqui
- Misha, Grisha and Underground, Ronda #425 (Div. 2), Problema D: Resolver aqui
- Letters Removing, Ronda #452 (Div. 1), Problema F: Resolver aqui
5. Semana 17/08 a 23/08: Tópicos Avançados
TBD
Leituras recomendadas:
6. Semana 24/08 a 30/08: Output-only (otimização)
Introdução a problemas de otimização
Leituras recomendadas:
Algoritmos greedy
Leituras recomendadas:
Hill climbing
Leituras recomendadas:
Otimização convexa (EXTRA)
Leituras recomendadas:
Pesquisa local (EXTRA)
Leituras recomendadas:
Problemas do CodeForces (EXTRA)
- Safe cracking, Ronda Beta #41, Problema C: Resolver aqui
- Online Exam, Ronda de Maratona 1 (Difícil/Problema de Maratona): Resolver aqui