Skip to content

🎈all problems that I've solve during my training for ACM-ICPC

License

Notifications You must be signed in to change notification settings

theexplorist/competitive-programming-1

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Access my public notebook, a Notion workspace where I do my notes while studying and coding general-purpose algorithms. The book I 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 main online judge profiles:


Solutions categorized into themes

computational geometry

brute force

  • iterative
  • recursive backtracking
    • πŸ“— uva/10344: check if some arithmetic expression of 5 given numbers will result in 23 β†’ check all combination of operators for each permutation of the given numbers
    • πŸ“— spoj/MKJUMPS: given an unweighted implicit graph, count the longest possible path β†’ DFS + backtracking
    • πŸ“— code-jam/2020-QR-indicium-TLE: generate M, where M[i][j] is any value in [1 .. N] (2 <= N <= 5), but without repeting a value in same line or column, and with the sum of the main diagonal equal to K
    • πŸ“™ uva/10503: given domino pieces, check if it is possible to arrive at a target piece from an initial piece using N intermediate pieces (possibly rotating them) β†’ DFS + backtracking
    • pruned permutations
    • sudoku
    • n-queens

graphs

  • 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
  • traversal
    • πŸ“— uva/11831 β†’ consider grid as an implicit graph and walk through it, or just rotate the robot, for each received instruction
    • πŸ“™ code-jam/2020-1A-pascal-walk-TLE
    • πŸ“™ uva/12442: given a graph with all vertices with out-degree 1, find the vertice that reaches the most vertices
    • πŸ“™ uva/11906 β†’ consider grid as an implicit graph and walk through it avoiding redundant positions (nr, nc)
    • flood fill
      • πŸ“— uva/11094
      • πŸ“• uva/1103 β†’ consider each pixel as a vertex of an implicit graph, then identify each hieroglyph counting the number of white CCs within it
    • bipartite checking
    • strongly connected components (SCC)
      • πŸ“™ uva/11504: count the number of SCCs without incoming edge from a vertex of another SCC
    • topological sorting
    • bridges and articulation points
    • 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
      • πŸ“™ icpc/2019-01-uri-2965
  • shortest path
    • single-source
      • unweighted graph
        • πŸ“™ icpc/2014-01-uva-12797 β†’ apply a BFS for each subset of letters possible (only 2^10) using bitmask
      • weighted graph
        • πŸ“• uva/11367 β†’ find the shortest path on space-state graph, where each vertex represent a city and a level of car fuel
        • πŸ“™ uri/1123
        • πŸ“™ uva/10806: find the global shortest path from 0 to V-1 (round trip), without repeting edges
    • all-pairs
  • minimum spanning tree (MST)

math

  • ad-hoc
  • number theory
    • πŸ“™ uri/2291: print n-th divine number, the one that is equal to the sum of the sum of each divisor from 1 to n
    • greatest common divisor (GCD)
    • prime numbers
      • πŸ“— spoj/PRIONPRI: prime checking
      • sieve of eratosthenes
        • πŸ“™ 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
        • πŸ“™ codeforces/576-A
        • πŸ“— spoj/AMR11E: print the n-th number that has at least 3 distinct prime factors β†’ use modified sieve
        • πŸ“™ spoj/PRIME1: print all primes p in [m .. n], 0 <= m <= n <= 10^9, n-m <= 10^5 β†’ sieve + prime checking
      • 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/10042
        • πŸ“™ uva/10139: do n! is divisible by m? β†’ check if the prime factors of m are contained in the prime factors of n!
    • module arithmetic
      • πŸ“— uva/10176: is a given binary number of 100 digits divisible by 131071?
  • combinatorics
    • fibonacci numbers
      • πŸ“™ uva/10334 β†’ compute (n+2)-th fibonnaci number
    • binomial coefficient
      • πŸ“— codeforces/844-B
      • πŸ“• icpc/2019-01-uri-2972: calculate the sum of C(N, k)%2 for all k in [0 .. n], i.e., how many odd combinations of k heads between n coins there are β†’ just compute 2^qtyBitsOn(n)
  • game theory
    • minimax
      • πŸ“™ uva/10111: given a state of a tic tac toe board, check if X will win independent of the O movement β†’ minimax + memo + backtracking
      • πŸ“™ uva/12484: alberto and wanderley take one of two cards at the edges of the cards sequence, alberto want maximize it β†’ fill memo table in row-major order
      • optimized
        • πŸ“• uva/847: multiplication game β†’ note that if Stan always multiply by 9 and Ollie by 2, it's still an optimal solution

searching

  • segment tree
    • πŸ“— codeforces/339-D
    • 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 the 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
  • binary search
    • πŸ“— 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/1284-B
    • πŸ“™ 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
    • on answer

techniques

divide & conquer

  • πŸ“™ codeforces/768-B β†’ knowing the size of the final array with a little math, use the same idea to query a range in a segment tree

ad-hoc

dynamic programming

  • πŸ“™ codeforces/1061-C β†’ use space saving + all divisors in O(sqrt(n)) to optimize
  • πŸ“— uva/10943
  • πŸ“™ uva/10721
  • πŸ“— uva/10003
  • πŸ“— uva/10337
  • πŸ“— uva/11450
  • πŸ“™ uva/10651 β†’ use bitmasks
  • πŸ“™ codeforces/166-E
  • digit
    • πŸ“™ uri/1707: given two numbers x and y, compute the sum of the decimal digits of the odd numbers in the range [min(x,y) .. max(x,y)]
    • πŸ“— spoj/CPCRC1C
  • longest increasing subsequence (LIS)
    • πŸ“™ uri/1517
    • πŸ“™ uva/10131 β†’ sort elephants based on increasing kg, then apply LDS on iq
    • πŸ“™ uva/11456 β†’ find the max(lis[i]+lds[i]-1) for all i in [0 .. N-1], being i where the subsequence starts
  • coin change (CC)
  • max 2D range sum
    • πŸ“— uva/108
    • πŸ“• 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
  • traveling salesman problem (TSP)
  • 0-1 knapsack
    • πŸ“™ uri/1487
    • πŸ“— spoj/KNAPSACK
    • πŸ“— spoj/SCUBADIV
    • πŸ“— uri/2498
    • subset sum
      • πŸ“— uri/1203: check if any subset of A has a sum equal to K
      • πŸ“™ uva/10616: given an array of size N, count how many subsets of size M have their sum divisible by D β†’ use module arithmetic
      • πŸ“— uva/624: find a subset of A with the max sum k <= K, and recovery it for printing
      • with repetition
  • max 1D range sum
  • longest common subsequence (LCS)
    • πŸ“— spoj/ADASEQEN
    • πŸ“— 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

greedy

About

🎈all problems that I've solve during my training for ACM-ICPC

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 96.7%
  • Python 2.5%
  • Shell 0.8%