Check out the USACO Guide to get better at competitive programming!
Speed up compile times: https://codeforces.com/blog/entry/53909
g++ -std=c++11 /usr/include/path_to/bits/stdc++.h
This repository contains solutions to various competitive programming problems.
Command to find problems solved:
find -type f -name "*.cpp" ! -name "*main*" -not -path "./cpbook-code/*" -not -path "./alphastar/*summer*/*" -not -path "./**/*game*/*" | wc -l
Note: Nothing below is kept up to date anymore!!
Solutions to USACO training and USACO contest problems.
Problem Number | Problem Name | Solution Notes |
---|---|---|
1.5.1 | Arithmetic Progressions | Careful Brute Force |
1.6.3 | Superprime Rib | Brute force |
2.1.1 | The Castle | Floodfill to assign each room a number |
2.1.2 | Ordered Fractions | Generate all possible fractions |
2.1.3 | Sorting A Three-Valued Sequence | Notes written as comments in code |
2.1.4 | Healthy Holsteins | Brute force |
2.1.5 | Hamming Codes | Brute force |
2.2.1 | Preface Numbering | Brute force |
2.2.2 | Subset Sums | DP |
2.2.3 | Runaround Numbers | Brute force |
2.2.4 | Party Lamps | Brute force 2^4, doesn't matter if you press button twice |
2.3.1 | Longest Prefix | DP |
2.3.2 | Cow Pedigrees | DP |
2.3.3 | Zero Sum | Brute force (DFS) |
2.3.4 | Money Systems | DP (VN) |
2.3.5 | Controlling Companies | Recursion |
2.4.1 | The Tamworth Two | Brute force, maximum (100*4)^2 steps before "impossible" |
2.4.2 | Overfencing | run shortest path BFS on two exit nodes |
2.4.3 | Cow Tours | Dijkstra |
2.4.4 | Bessie Come Home | Dijkstra |
2.4.5 | Fractions to Decimals | Recursion |
3.1.1 | Agri-Net | Prim's (or Kruskal) |
3.1.2 | Score Inflation | Knapsack |
3.1.3 | Humble Numbers | Create size N set of possible numbers, brute force |
3.1.4 | Contact | Brute force |
3.1.5 | Stamps | DP |
3.2.1 | Factorials | Count number of twos and fives |
3.2.2 | Stringsobits | Define dp(i, j) = # of numbers with i bits and at most j ones |
3.2.3 | Spinning Wheels | Brute Force, max 360 seconds |
3.2.4 | Feed Ratios | Brute force |
3.2.5 | Magic Squares | BFS |
3.2.6 | Sweet Butter | APSP |
3.3.1 | Riding the Fences | Eulerian Path |
3.3.2 | Shopping Offers | Dijkstra |
3.3.3 | Camelot | Brute force, king can take only two steps |
3.3.4 | Home on the Range | DP |
3.3.5 | A Game | DP |
3.4.1 | American Heritage | Recursively generate tree |
3.4.2 | Electric Fence | Pick's Theorem |
3.4.3 | Raucous Rockers | Brute Force (Bitmasking) |
4.1.1 | Beef McNuggets | DP |
4.1.2 | Fence Loops | Dijkstra |
4.2.1 | Drainage Ditches | Max Flow O(V^2E) |
4.2.2 | The Perfect Stall | Max Bipartite Matching |
4.2.3 | Job Processing | Greedy |
4.3.1 | Buy Low, Buy Lower | DP, BigInteger (less than + addition) |
4.3.2 | Street Race | DFS, Set, Brute Force |
4.3.3 | Letter Game | String permutation, brute force, map/set |
4.4.1 | Shuttle Puzzle | Brute Force, BFS (Queue), Implementation |
4.4.2 | Pollutant Control | Max Flow Min Cut, minimize removed edges |
4.4.3 | Frame Up | All Topological Sorts |
5.1.1 | Fencing the Cows | Simple Convex Hull |
5.1.2 | Starry Night | Floodfill, Implementation |
5.1.3 | Musical Themes | Sliding Window Iterative DP, Longest Repeating Non-Overlapping Substring, deltas |
5.2.1 | Snail Trail | Brute Force, Implementation, Recursion |
5.3.1 | Milk Measuring | DP, Optimization, Sliding Window |
5.3.2 | Window Area | Implementation, Calculating overlapping rectangle area - Split rectangle into four parts |
5.3.3 | Network of Schools | Min additional edges to form SCC |
5.3.4 | Big Barn | Prefix Sums + Binary Search, doable with DP as well |
5.4.1 | Canada Tour | DP |
5.4.2 | Character Recognition | DP, Bit manipulation for Optimization/Pruning |
5.4.3 | TeleCowmunication | Max Flow Min Cut, Split Nodes |
5.5.1 | Picture | Line Sweep |
5.5.2 | Hidden Passwords | String Processing |
5.5.3 | Two Five | DP |
Contest Date | Problem ID | Problem Name | Solution Notes |
---|---|---|---|
Feb 2018 | reststops | Rest Stops | Greedy |
Feb 2019 | revegetate | The Great Revegetation | Graph, DFS, Tricky |
Contest Date | Problem ID | Problem Name | Solution Notes |
---|---|---|---|
Nov 2012 | clumsy | Clumsy Cows | Greedy |
Nov 2012 | distant | Distant Pastures | APSP, dijkstra |
Nov 2012 | bbreeds | Balanced Cow Breeds | Same problem as Gold |
Dec 2012 | crazy | Crazy Fences | Computational Geometry |
Dec 2012 | wifi | Wifi Setup | DP |
Dec 2012 | mroute | Milk Routing | Dijkstra |
Jan 2013 | paint | Painting the Fence | Coordinate Compression, Store Deltas & Sweep |
Jan 2013 | squares | Square Overlap | Sweep |
Jan 2013 | invite | Party Invitations | precompute which groups each cow is in |
Feb 2013 | perimeter | Perimeter | Optimized Floodfill |
Feb 2013 | tractor | Tractor | Binary search for answer, dfs |
Feb 2013 | msched | Milk Scheduling | Greedy |
Mar 2013 | poker | Poker Hands | Greedy |
Mar 2013 | painting | Farm Painting | Sweep |
Mar 2013 | cowrun | The Cow Run | DP, same as gold |
Open 2013 | gravity | What's Up With Gravity? | Dijkstra |
Open 2013 | fuel | Fuel Economy | Greedy |
Open 2013 | cruise | Luxury River Cruise | Find where sequence repeats |
Nov 2013 | nocow | Farmer John has no Large Brown Cow | Solvable with a bit of math |
Nov 2013 | crowded | Crowded Cows | Sweep, can use multiset instead of monotonic queue |
Nov 2013 | pogocow | Pogo-Cow | DP, note that Bessie can go either direction |
Dec 2013 | msched | Milk Scheduling | Greedy, sweep |
Dec 2013 | vacation | Vacation Planning | Code is slightly modified from gold version, answer is unnecessarily complicated for silver |
Dec 2013 | shuffle | The Bessie Shuffle | Repeated Squaring, Permutations, Composing functions/permutations |
Jan 2014 | slowdown | Bessie Slows Down | Maintain two arrays, simulation |
Jan 2014 | ccski | Cross Country Skiing | Prim's |
Jan 2014 | recording | Recording the Moolympics | Greedy |
Feb 2014 | auto | Auto-complete | Binary search |
Feb 2014 | rblock | Roadblock | Dijkstra |
Feb 2014 | scode | Secret Code | DP |
Mar 2014 | irrigation | Watering the Fields | Kruskal/MST |
Mar 2014 | lazy | The Lazy Cow | Rotate grid 45 degrees |
Mar 2014 | mooomoo | Mooo Moo | DP |
Open 2014 | fairphoto | Fair Photography | Sweep |
Open 2014 | gpsduel | Dueling GPSs | Dijkstra |
Open 2014 | odometer | Odometer | DP Construction |
Dec 2014 | piggyback | Piggy Back | Shortest Path on three nodes |
Dec 2014 | marathon | Marathon | DP |
Dec 2014 | cowjog | Cow Jog | Sweep |
Jan 2015 | stampede | Stampede | Sweep |
Jan 2015 | cowroute | Cow Routing | Dijkstra |
Jan 2015 | meeting | Meeting Time | DP |
Feb 2015 | censor | Censoring | Rolling Hash |
Feb 2015 | hopscotch | Cow Hopscotch | DP |
Feb 2015 | superbull | Superbull | MST, Prim's O(V^2) |
Open 2015 | bgm | Bessie Goes Moo | Parity |
Open 2015 | trapped | Trapped in the Haybales (Silver) | Sort, Sweep |
Open 2015 | buffet | Bessie's Birthday Buffet |
Contest Date | Problem ID | Problem Name | Solution Notes |
---|---|---|---|
Dec 2015 | cardgame | High Card Low Card (Gold) | Greedy |
Dec 2015 | feast | Fruit Feast | DP (Knapsack) |
Dec 2015 | dream | Bessie's Dream | Dijkstra |
Jan 2016 | angry | Angry Cows | Sweep/Greedy/DP, Binary Search (Optional) |
Jan 2016 | radio | Radio Contact | DP |
Jan 2016 | lightsout | Lights Out | Simulation, Coordinates, Brute Force, Implementation |
Feb 2016 | cbarn | Circular Barn | Greedy |
Feb 2016 | cbarn2 | Circular Barn (Revisited) | DP |
Feb 2016 | fencedin | Fenced In | MST (Kruskal) |
Open 2016 | split | Splitting The Field | Sweep |
Open 2016 | closing | Closing The Farm | UFDS (Note: Runs really close to time limit) |
Open 2016 | 248 | 248 | DP |
Dec 2016 | moocast | Moocast | UFDS, brute force |
Dec 2016 | checklist | Cow Checklist | DP |
Dec 2016 | lasers | Lasers and Mirrors | BFS |
Jan 2017 | bphoto | Balanced Photo | Fenwick Tree |
Jan 2017 | hps | Hoof, Paper, Scissors | 3D DP |
Jan 2017 | cownav | Cow Navigation | BFS |
Feb 2017 | visitfj | Why Did The Cow Cross The Road | Dijkstra |
Feb 2017 | nocross | Why Did The Cow Cross The Road II | DP |
Feb 2017 | circlecross | Why Did The Cow Cross The Road III | Fenwick Tree (BIT) |
Open 2017 | cownomics | Bovine Genomics | Rolling Hash |
Open 2017 | art2 | Modern Art 2 | Calculate start/end points |
Dec 2017 | piepie | A Pie For A Pie | BFS, binary search |
Dec 2017 | barnpainting | Barn Painting | DP |
Dec 2017 | hayfeast | Haybale Feast | Two Pointers |
Jan 2018 | mootube | MooTube | UFDS |
Jan 2018 | atlarge | Cow At Large | DFS/BFS |
Jan 2018 | spainting | Stamp Painting | DP, recurrence |
Feb 2018 | snowboots | Snow Boots | Sort, Doubly-Linked List |
Feb 2018 | dirtraverse | Directory Traversal | DFS |
Feb 2018 | taming | Taming The Herd | DP |
Open 2018 | sort | Out of Sorts | BIT |
Open 2018 | milkorder | Milking Order | Topological Sort (Lexicographically earliest) |
Open 2018 | talent | Talent Show | Binary search for answer, DP |
Dec 2018 | dining | Fine Dining | Dijkstra |
Dec 2018 | cowpatibility | Cowpatibility | PIE |
Dec 2018 | teamwork | Teamwork | DP |
Jan 2019 | poetry | Cow Poetry | DP, power under mod, math |
Jan 2019 | sleepy | Sleepy Cow Sorting | Fenwick Tree |
Jan 2019 | shortcut | Shortcut | Dijkstra, find path |
Feb 2019 | cowland | Cow Land | Tree Traversal Array, or alternatively Heavy-Light Decomposition |
Feb 2019 | dishes | Dishwashing | Greedy (Also doable with Greedy + Binary Search) |
Feb 2019 | paintbarn | Painting the Barn | Geometry, Prefix Sums, Line Sweep |
Open 2019 | balance | Balancing Inversions |
Contest Date | Problem ID | Problem Name | Solution Notes |
---|---|---|---|
Nov 2012 | bbreeds | Balanced Cow Breeds | DP |
Nov 2012 | cbs | Concurrently Balanced Strings | Prefix Sums |
Dec 2012 | gangs | Gangs of Istanbull/Cowstantinople | Greedy |
Dec 2012 | first | First! | trie, checking DAG for cycles |
Dec 2012 | runaway | Running Away From the Barn | |
Jan 2013 | lineup | Cow Lineup | sweep with two pointers |
Jan 2013 | island | Island Travels | bfs |
Jan 2013 | seating | Seating | Binary Tree, Lazy Propagation |
Feb 2013 | partition | Partitioning The Farm | DP |
Feb 2013 | taxi | Taxi | Min Cost Matching, calculate distance driven w/o cow |
Feb 2013 | route | Route Designing | DP |
Mar 2013 | cowrun | The Cow Run | DP |
Mar 2013 | hillwalk | Hill Walk | Line sweep, find a way to order hills |
Nov 2013 | nochange | No Change | DP, 2^k state |
Nov 2013 | sight | Line of Sight | If two cows can see the same point on the silo, they can see each other |
Nov 2013 | empty | Empty Stalls | Sweep |
Dec 2013 | vacationgold | Vacation Planning (Gold) | Dijkstra |
Dec 2013 | optmilk | Optimal Milking | Binary Tree |
Jan 2014 | skicourse | Building A Ski Course | DP |
Jan 2014 | skilevel | Ski Course Rating | Kruskal |
Feb 2014 | rblock | Roadblock | Dijkstra |
Feb 2014 | dec | Cow Decathlon | DP |
Mar 2014 | sabotage | Sabotage | Binary search, 1D max sum |
Mar 2014 | fcount | Counting Friends | Brute Force, greedily connect friends |
Dec 2014 | guard | Guard Mark | DP |
Dec 2014 | marathon | Marathon | Segment Tree |
Dec 2014 | cowjog | Cow Jog | Longest Non-Increasing Subsequence |
Jan 2015 | cowrect | Cow Rectangles | Sweep, assume we have to take one of the Holsteins |
Jan 2015 | movie | Moovie Mooving | DP, bitmasking |
Open 2015 | palpath | Palindromic Paths | DP |
Open 2015 | trapped | Trapped in the Haybales | Sort haybales by weight |
Open 2015 | buffet | Bessie's Birthday Buffet | DP |
Contest Date | Problem ID | Problem Name | Solution Notes |
---|---|---|---|
Dec 2015 | maxflow | Max Flow | LCA, prefix sums |
Dec 2015 | cardgame | High Card Low Card | Greedy |
Dec 2015 | haybales | Counting Haybales | Seg Tree, Lazy, Min Query & Sum Query |
Jan 2016 | fortmoo | Fort Moo | DP/Sliding Window |
Jan 2016 | mowing | Mowing The Field | 2D Range Tree |
Feb 2016 | balancing | Load Balancing | Binary Search, BIT |
Feb 2016 | fencedinplat | Fenced In | |
Open 2016 | 262144 | 262144 | DP |
Dec 2016 | team | Team Building | DP |
Jan 2017 | promote | Promotion Counting | BIT on preorder of tree |
Jan 2017 | tallbarn | Building a Tall Barn | Binary Search |
Jan 2017 | subrev | Subsequence Reversal | DP |
Feb 2017 | mincross | Why Did The Cow Cross The Road | Fenwick Tree |
Feb 2017 | nocross | Why Did The Cow Cross The Road II | DP, RMQ (Seg Tree) |
Feb 2017 | friendcross | Why Did The Cow Cross The Road III | 2D Seg Tree |
Open 2017 | art | Modern Art | Prefix Sums/Deltas |
Open 2017 | grass | Switch Grass | MST, Sets, I/O Optimization |
Dec 2017 | pushabox | Push A Box | Biconnected Components, BFS |
Dec 2017 | greedy | Greedy Gift Takers | Binary Search, Prefix Sums |
Open 2018 | disrupt | Disruption | Method 1: (Merging small to large, pool pointers method). Method 2: (LCA + Path Compression). Method 3: (HLD). Method 4: (2D Seg Tree, Graphically thinking) |
Dec 2018 | balance | Balance Beam | Convex Hull / Visualizing Geometry |
Jan 2018 | lifeguards | Lifeguards | DP (Note: Solution code is very sketchy and really shouldn't run in time) |
Feb 2018 | newbarn | New Barns | Centroid Decomposition |
Jan 2019 | redistricting | Redistricting | DP, Monotonic Queue |
Feb 2019 | cowdate | Cow Dating | Two pointers, math |
Open 2019 | treeboxes | Tree Boxes | LCA, Implementation, Interactive |
Solutions to various Codeforces problems. List no longer updated!
Here is the complete solutions folder.
Problem ID | Problem Name | Solution Notes |
---|---|---|
321C | C. Ciel the Commander | Centroid Decomposition |
342E | E. Xenia and Tree | Centroid Decomposition, LCA |
383D | D. Antimatter | DP |
497A | A. Reorder The Array | Multiset |
762B | B. USB vs PS/2 | Sorting, Greedy |
762E | E. Radio Stations | Segment Tree |
809A | A. Do you want a date? | Math, power, mod |
817D | D. Imbalanced Array | Stack, Sweep, Math |
937A | A. Olympiad | Set |
946D | D. Timetable | DP |
989D | D. A Shade of Moonlight | Binary Search, Math |
991B | B. Getting an A | Sorting |
1012B | B. Chemical table | Bipartite Graph |
1038C | C. Gambling | |
1061D | D. TV Shows | Multiset, Greedy |
1067B | B. Multihedgehog | |
1095F | F. Make it Connected | UFDS |
1098A | A. Sum in the tree | |
1099F | F. Cookies | Fenwick Tree |
1104A | A. Splitting into digits | brute force |
1104B | B. Game with string | Stack |
1104C | C. Grid Game | Ad Hoc |
1104D | D. Game with modulo | binary search, math |
1105A | A. Salem and Sticks | |
1105B | B. Zuhair and Strings | |
1105C | C. Ayoub and Lost Array | |
1105D | D. Kilani and the Game | |
1111A | A. Superhero Transformation | |
1111C | C. Creative Snap | |
1113A | A. Sasha and His Trip | Greedy |
1113B | B. Sasha and Magnetic Machines | |
1113C | C. Sasha and a Bit of Relax | |
1113D | D. Sasha and One More Name | |
1114D | D. Flood Fill | |
1117E | E. Decypher the String | Math, string processing |
1118E | E. Yet Another Ball Problem | Constructive Algorithms, Ad Hoc |
1130A | A. Be Positive | Ad Hoc |
1130B | B. Two Cakes | Greedy |
1130C | C. Connect | Floodfill, Brute Force |
1130D1 | D. Toy Train (Simplified) | Simulation |
1130D2 | D. Toy Train | Math, Precomputation |
1131D | D. Gourmet Choice | DAG, Detecting Cycles, Topo Sort |
1132D | D. Stressful Training | Binary Search, Greedy, Implementation |
1133F1 | F1. Spanning Tree With Maximum Degree | Greedy, UFDS, Kruskal |
1133F2 | F2. Spanning Tree With One Fixed Degree | Greedy, UFDS, Kruskal, Construction |
1137D | D. Cooperative Game | Math, Number Theory, Mods |
1139E | E. Maximize Mex | Bipartite Graph, Flow |
1141F1 | F1. Same Sum Blocks (Easy) | See 1141F2, though O(N^4) dp should also work |
1141F2 | F2. Same Sum Blocks (Hard) | Prefix sums O(N^2) |
1141G | G. Privatization of Roads in Treeland | Greedy, Implementation, DFS |
1151A | A. Maxim and Biology | Brute Force |
1151B | B. Dima and a Bad XOR | Brute Force, XOR (Note: Solution code is brute force/DP but a O(n*m) solution exists with observation) |
1151C | C. Problem for Nazar | Math, Implementation |
1151D | D. Stas and the Queue at the Buffet | Greedy, light math |
1153A | A. Serval and Bus | Math |
1153B | B. Serval and Toy Bricks | Greedy |
1153C | C. Serval and Parenthesis Sequence | Greedy |
1153D | D. Serval and Rooted Tree | Tree traversal, DP (ish) |
1153E | E. Serval and Snake | Binary Search, Brute Force |
1169D | D. Good Triple | Brute Force |
1173A | A. Nauuo and Votes | Greedy |
1173B | B. Nauuo and Chess | Greedy, Constructive Algorithms |
1173C | C. Nauuo and Cards | Greedy |
1173D | D. Nauuo and Circle | Combinatorics, DP, trees |
1173E1 | E1. Nauuo and Pictures (easy version) | DP, probability, Modular Multiplicative Inverses |
1176A | A. Divide It | Brute Force, Recursion |
1176B | B. Merge It | Greedy |
1176C | C. Lose It | Greedy |
1176D | D. Recover It | multiset, prime generation, greedy |
1176E | E. Cover It | Bicoloring (ish) |
1181A | A. Chunga-Changa | |
1181B | B. Split a Number | |
1181C | C. Flag | |
1181D | D. Irrigation |
Problem Name | Solution Notes |
---|---|
2003 A. Trail Maintenance | Union Find |
2004 B. Hermes | DP, Iterative, Sliding Window |
2004 D. Empodia | Read header of file, IDK why solution gets AC :P |
2014 E. Friend | Induction Trick |
Solutions to UVa Online Judge problems. Mostly starred problems from Competitive Programming 3.
Solutions to various Google Kick Start competitions.
Problem Name | Solution Notes |
---|---|
A - Even Digits | Ad Hoc |
A - Lucky Dip | Brute Force / Binary Search |
A - Scrambled Words | Strings, implementation |
B - No Nine | Digit DP (Alternatively, Ad Hoc) |
Problem Name | Solution Notes |
---|---|
A - Training | Sorting, Prefix Sums |
A - Parcels | Multi-Source BFS, Manhattan Distance |
B - Building Palindromes | Prefix Sums |
B - Energy Stones | DP Knapsack, sorting |
B - Diverse Subarray | Segment Tree |
Solutions to various Google Code Jam competitions.
Round | Problem Name | Solution Notes |
---|---|---|
1A | Waffle Choppers | Prefix sums, greedy |
1A | Bit Party | Binary Search |
2 | Falling Balls | Implementation |
Round | Problem Name | Solution Notes |
---|---|---|
Qualification | Foregone Solution | Greedy |
Qualification | You Can Go Your Own Way | Greedy |
Qualification | Cryptopangrams | GCD, BigInteger, Math |
Qualification | Dat Bae | Interactive, similar strategy to CodeForces 1117E |
1A | Pylons | Construction, Implementation |
1A | Golf Gophers | Chinese Remainder Theorem |
1B | Manhattan Crepe Cart | Sweep lines |
1B | Draupnir (Visible Set Only) | Solving systems of equations (math) |
1B | Fair Fight | Segment Tree, Binary Search |
Solutions to CSES Problem Set.
Problem Name | Solution Notes |
---|---|
Weird Algorithm | Simulation, careful with integer overflow |
Missing Number | Basic Arrays |
Repetitions | Maximum length substring with same characters |
Increasing Array | Greedy |
Permutations | Ad Hoc, Construction |