My solutions on Algorithms Lab course at ETH Zurich. Not all ideas come from my head. Some come from repositories of NorfairKing and Timethy. Thank you guys!
- C++/STL
- Greedy, Divide & Conquer
- Binary Search, BFS, DFS
- Dijkstra, MST
- Graph teory
- Complexity teory
- Graph flows
- Apply algorithms properly
- CGAL and BOOST libraries
- Geometric algorithms
- Linear and Quadratic programming
- Max flow min cost, min cuts
- Max bipartite matching, minimum independent set
- One of the 2 courses that every ETH CS master student have to take
- 2 hours lecture + 2 hours problem of the week
- Be prepared to spend up to 20 hours solving various algo tasks
- Very similar to informatics olympiads
- One of the most difficult courses at ETH
- If you have experience from informatics olympiads it should not be that hard to pass
- If not but you are really smart guy it should not be problem as well
- If you are not one of the cases above try to spend at least 15 hours per week + 3 weeks before the exam with preparation
- Passing score is usually around 250 out of 600 points
Week | Problem | Points (out of 100) | Solution |
---|---|---|---|
1 | Build the sum | 100 | primitive |
1 | Even pairs | 100 | Precomputed sum + combinatorics |
1 | Even matrices | 100 | The same as Even pairs but in matrix |
1 | Dominoes | 100 | For loop + memo var |
1 | False coin | 100 | Items tagging |
PoW1 | Deck of cards | 100 | Sliding window O(n) (I got 100 even with double for loop |
2 | Boats | 100 | Sort + kind of Optimal scheduling |
2 | Books | 100 | Sort + stl tricks |
2 | Evolution | 100 | Tree + DPS + Skip list |
2 | Search snippets | 100 | Sort + map + interesting array iteration |
PoW2 | Octopussy | 100 | Recursion + tagging |
3 | Hit | 100 | Intersection |
3 | Antenna | 100 | Min circle |
3 | AlmostAntenna | 100 | Support points + min circle |
3 | First Hit | 99 | Intersection |
3 | Hiking maps | 100 | Inside triangle test + duplicates removal |
Pow3 | Return of the Jedi | 0 | ??? |
4 | Ant challange | 100 | Multiple graphs + MST + Dijkstra |
4 | Buddy selection | 100 | Set intersection + Max cardinality matching |
4 | Graphs | 100 | MST + Dijkstra |
4 | Important bridges | 100 | Biconnected components |
4 | Shortest paths | 100 | Dijkstra |
PoW4 | Tracking | 100 | K-level graph + Dijkstra |
5 | Burning coins | 100 | DP + memo(2D array -> (left, right) -> best game |
5 | Light pattern | 100 | O(n) + right to left switching |
5 | Light at the museum | 100 | Bruteforce + split and list O(2^(n/2) * n) |
5 | Notebook | 100 | String hashing unordered_map |
5 | The great game | 100 | Similar to bur. coins but much harder. DP + memo (one for even one for odd moves) |
PoW5 | Motorcycles | 100 | 128b Integer + slope comparing + Sort |
6 | Coin tossing | 100 | Easy max flow |
6 | Kingdom defence | 100 | Min flow per edge |
6 | Shopping | 100 | Doubled graph + max flow |
6 | Tetris | 100 | Max flow |
PoW6 | Poker chips | 100 | Huge DP + 5D memo |
7 | Max | 100 | QP + negate obj. funtion + negate obj. value |
7 | Diet | 100 | LP |
7 | Inball | 100 | LP |
7 | Portfolios | 100 | QP as in lecture slides |
PoW7 | Marathon | 100 | All shortest paths, Dijkstra from both sides + iterate over edges |
8 | Bistro | 100 | DT + nearest_vertex |
8 | Graypes | 100 | Edges in DT form Near. neigh. graph -> iterate over them |
8 | Germs | 100 | Edges in DT form Near. neigh. graph -> vertex circulator |
8 | H1N1 | 60 | Dijkstra + DT + BFS + precomputation |
PoW8 | Lestrade | 100 | LP + DT |
9 | Algocoon | 100 | Multiple Min cuts |
9 | Canteen | 100 | Non negative weights + fridges as edges to later days |
9 | Real estate | 100 | Const for non neg. weights, Max flow min cost |
9 | Satellites | 100 | Max bipartite matching |
PoW9 | Surveillance Photographs | 100 | Max flow. Similar to Shopping... |
10 | On her majesty | 100 | Dijkstra for every agent + bipartite matching + double for 2 shelters |
10 | Bonus Level | 100 | 2 traverses in one + 2D memo (diagonal + x) |
10 | Light the stage | 100 | DT + remember who kill every person |
10 | Return of the jedi | 100 | MST + DFS + max edge from to |
PoW10 | Sith | 100 | Binary search for max component + DT |
11 | Carsharing | 100 | Max flow min cost + tricky bias and edge cost |
11 | Defensive line | 100 | Table DP (2D table for players hit and attackers) + sliding window |
11 | Punch | 100 | Table DP (2D table for max drinks and min price) |
11 | Strikesback | 100 | LP + DT |
PoW11 | High school teams | 100 | Bottom up DP with split and list |
12 | Beach bars | 100 | Greedy + Sort |
12 | Casino royal | 100 | The same as Carsharing |
12 | Golden eye | 100 | DT + Union find |
12 | New tiles | 0 | Bit playing DP |
12 | Placing knights | 100 | Max cardinality matching |
12 | Radiation | 0 | LP |
PoW12 | WorldCup | 100 | DT + LP + realize that we never cross same circle twice i.e. we are inside it |
13 | Bobs Burden | 100 | 3x Dijkstra + out in edges + iterate over artificial edges |
13 | Clues | 100 | DFS + 2 coloring + DT + connected compomenents |
13 | Corbusier | 100 | Table DP for 100p + split and list for 60p |
13 | Goldfinger | 100 | DT + LP + similar to strikesback |
13 | Phantom Menace | 100 | Min vertex cut |
13 | Planks | 100 | Split and List DP + sets as bits |
PoW13 | Fleetrace | 100 | Max weighted bipartite matching |
14 | Cantonal Curier | 100 | Max flow no idea why it works |