Access my public notebook, a Notion workspace where I do my notes while studying and coding general-purpose algorithms. The book I use and recommend for studying is "Competitive Programming 3: The new lower bound of programming contests" by Steven Halim.
Feel free to follow my progress on my online judge profiles:
- implementation
- π codeforces/1296-C β maps each position of the robot with the string index, and check if a new position has already been mapped before
- iterative
- all subsets
- π uva/12455 β use bitmasks
- all subsets
- recursive backtracking
- traversal
- π uva/11831 β consider grid as an implicit graph and walk through it, or just rotate the robot, for each received instruction
- π uva/11906 β consider grid as an implicit graph and walk through it avoiding redundant positions (nr, nc)
- flood fill
- π uva/1103 β consider each pixel as a vertex of an implicit graph, then identify each hieroglyph counting the number of white CCs within it
- depth-first search (DFS)
- π codeforces/104-C:
check if the given undirected graph can be represented as a set of three or more rooted trees, whose roots are connected by a simple cycle
β check if the graph is connective and has only one cycle
- π codeforces/104-C:
- shortest path
- dijkstra
- π uva/11367 β find the shortest path on space-state graph, where each vertex represent a city and a level of car fuel
- dijkstra
- specials
- tree traversal
- π spoj/ONP:
transform the algebraic expression with brackets into reverse polish notation (RPN)
β consider the given expression as the in-order traversal in a binary tree, then print post-order traversal recursively without building the tree
- π spoj/ONP:
- tree traversal
- binary search
- π codeforces/1324-D:
given the A and B arrays, count the quantity of pairs i < j such that A[i]+A[j] > B[i]+B[j]
β diff being the A-B array, count, for all i in [0 .. N-2], how many times -diff[i] < diff[j], for all j in [i+1 .. N-1] - π codeforces/91-B:
given the array a, compute the array d, where d[i] = j-(i+1) for the max j such that a[j] < a[i]
β apply binary search on preprocessed array mn, filled from right to left - π spoj/PAIRS1:
given the A array, count the quantity of pairs i < j such that A[i]-A[j] == K
β search on the sorted array A by the A[n]+K, for all n in [0 .. N-1]
- π codeforces/1324-D:
- segment tree
- lazy propagation
- π uri/2658 β build a segment tree for RSQ, but store an array of size 9 in tree[v], where tree[v][n] indicates the frequency that each note n appears in that interval
- π uva/11402 β build a segment tree for RSQ, but keep in lazy[v] the type of pending operation to be performed in that interval of A
- lazy propagation
- ad-hoc
- finding pattern
- π uva/11718 β compute K * N^(K-1) * sumA using fast power mod
- π codeforces/1092-D1 β remove adjacent ones whose absolute difference is even (using a stack)
- sequences
- finding pattern
- number theory
- prime numbers
- sieve of eratosthenes
- π spoj/PRIME1:
print all primes p in [m .. n], 0 <= m <= n <= 10^9, n-m <= 10^5
β sieve + prime checking - π uva/10539:
compute the quantity of non-prime numbers in [lo .. hi] which are divisible by only a single prime number, 0 < lo <= hi < 10^12
β generate all powers of each prime number - π spoj/AMR11E:
print the n-th number that has at least 3 distinct prime factors
β use modified sieve
- π spoj/PRIME1:
- prime factorization
- π uri/2661:
compute the number of divisors of n that can be written as the product of two or more distinct prime numbers (without repetition), 1 <= n <= 10^12
β note that the product of any combination of prime factors of a number will always be a divisor of that number - π uva/10139:
do n! is divisible by m?
β check if the prime factors of m are contained in the prime factors of n!
- π uri/2661:
- sieve of eratosthenes
- prime numbers
- game theory
- minimax
- combinatorics
- π uva/10651 β use bitmasks
- longest common subsequence (LCS)
- π spoj/IOIPALIN:
given a string, determine the minimal quantity of characters to be inserted into it in order to obtain a palindrome
β compute length of string minus lcs between string and reversed string
- π spoj/IOIPALIN:
- max 1D range sum
- π uva/787:
max 1D range product query
β compute for each sub-range without 0
- π uva/787:
- 0-1 knapsack
- longest increasing subsequence (LIS)
- max 2D range sum
- π uva/10755:
max 3D range sum
β use max 2D range sum in two of the three dimensions and max 1D range sum (kadane) on the third dimension
- π uva/10755:
- π codeforces/1324-B:
given a sequence of integers, is there a subsequence palindrome of size 3?
β check if there are two equal non-adjacent numbers using brute force - π codeforces/1324-C β note that it's unnecessary jump to the left, so to minimize d, just jump between the nearest 'R' cells