- Fibonacci: Várias implementações para encontrar o valor de uma posição na sequência de Fibonacci
- String: Alguns exemplos de questões envolvendo strings (como palíndromo)
- Recursão: Contém alguns algoritmos que usam recursão
- STL: Explica como funciona alguns dos contêineres presente na Standad Template Library do C++ (como pilha e fila)
- Grafo: Alguns algoritmos para representar e manipular grafos
- Range: Algoritmos para fazer rapidamente Range_Query e Range_Update
- Teoria dos Números: Divisores/Primos
Torna o cin e o cout um pouco mais rápido desvinculando-os do scanf e printf
Não pode ser usado junto com o printf e scanf
O printf e scanf ainda é mais rápido
ios::sync_with_stdio(false);
cin.tie(NULL);while (cin >> x) {
// ...
}freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);cout << fixed << setprecision(10) << res << endl;Se o importante é saber o número de vezes que um número aparece, array de frequência é uma boa
Se tiver muitos valores, pode ser necessário usar um map
Esse número serve para fazer não da overflow
Use as propiedades:
(a+b) % c = a%c + b%c(a-b) % c = a%c - b%c(ab) % c = (a%c)(b%c)(a/b) % c < (a%c)/(b%c)
Preste atenção que não é necessário que o resultado final exceda o limite para dar overflow
Se em qualquer parte da com acontecer um overflow O resultado já estará atrapalhado
(um int somado a outro int retorna um int que se tiver seu valor estourado já atrapalha a conta)
#define INF 0x3f3f3f3fINF cabe em um int e INF + INF também
INF * INF cabe em um long
Dá para usar memset com INF
Variaveis globais são incializadas com 0
Tentando descobrir a complexidade da solução pelas restriçoes do input
| Tamanho do Input | Complexidade de Tempo |
|---|---|
|
|
|
|
|
sort(vec.begin(), vec.end())
sort(array, array + n)
sort(vec.begin(), vec.end(), func)
// Não esqueça de sortings alternativos, como counting sort
reverse(vec.begin(), vec.end())
random_shuffle(vec.begin(), vec.end())- Subsets:
void search(int i) {
// i não faz parte
search(i+1);
// i faz parte
add i+1 to subset
search(i+1);
pop i+1 to subset
}
// Ou usar int para iterar sobre subsets- Permutações:
sort(vec.begin(), vec.end());
do {
// process permutation
} while (next_permutation(vec.begin(), vec.end()));