This post is the English companion page for my Chinese write-up of the 23rd China Jiliang University ACM Team Contest.
The original Chinese version contains the full A-N solution notes, including problem summaries, constraints, main ideas, correctness arguments, complexity analysis, and reference code. This English version keeps a compact contest overview and a problem-by-problem index for readers who browse the English site.
The contest contains 14 problems, labeled A through N. The problem set covers simulation, elementary number theory, constructive algorithms, tree DP, rerooting DP, shortest paths, disjoint set union, dynamic programming, and combinatorial game theory.
The Codeforces ratings below are subjective training estimates, not official difficulty ratings.
| Problem | Title | Difficulty | CF Estimate | Tags |
|---|---|---|---|---|
| A | Coin Classification | Medium-Hard | 1900 | Interactive, classification, decision strategy |
| B | Agent Execution Plan Tree | Hard | 2100 | Tree DP, rerooting DP, combinatorics, modular inverse |
| C | Why Birds Can Fly | Easy | 900 | Number theory, gcd, prime factors, enumeration |
| D | GTNH? | Medium | 1600 | Shortest path, Dijkstra, virtual nodes |
| E | Matrix Construction | Hard | 2300 | Construction, xor permutation, complete mapping |
| F | Why Does Life Sleep | Easy | 800 | Simulation, adjacent differences, boundary checks |
| G | ACMBTI String | Hard | 2200 | Construction, subsequences, state compression, search |
| H | With This Flame, Cut Through Everything | Very Hard | 2400 | Combinatorial games, permutation counting, math |
| I | All Past Lives Are Empty | Easy | 800 | Divisibility, basic I/O |
| J | After The Snow Melts | Medium | 1700 | Offline processing, DSU, grid connectivity |
| K | Taibo Believes In LanGod’s Beacon Of Hope | Medium-Hard | 1900 | Dynamic programming, state optimization, decision process |
| L | Ten Million First Meetings | Simple | 1200 | Prefix sums, constructive checking, non-negative arrays |
| M | Then, Toward Tomorrow | Simple | 1000 | Construction, permutations, inverse operations, lexicographic order |
| N | Dice Of Fate | Easy | 800 | Simulation, dice state maintenance |
The key is to maintain groups of coins already known to be equal. Pairwise comparisons split representatives into low-side candidates and high-side candidates, then each side can be separated with one representative because each side contains at most two possible classes.
Root the tree and count valid topological orders with subtree sizes and multinomial coefficients. A rerooting step transfers the answer from one root to its neighbors by updating the corresponding subtree contribution.
The task can be reduced to checking candidate numbers against gcd and prime-factor constraints. Enumerating candidates in increasing order gives the smallest valid answer.
Same-color jumps can be compressed by adding virtual color nodes. After that, the problem becomes a shortest-path problem on the expanded graph and can be solved with Dijkstra.
The construction relies on xor permutations and complete mappings. The main difficulty is arranging values so that every row and column satisfies the required xor property.
Scan the important time points and adjacent differences. The answer follows from direct simulation and careful boundary handling.
The goal is to control which subsequence patterns appear. A state-compressed search or constructive enumeration can track the 16 possible patterns and build a valid string.
First analyze the winning condition of the game, then count the permutations that preserve optimal play. The counting part is the main mathematical difficulty.
This is a straightforward divisibility problem: output the quotient a / b under the promised condition.
Process water levels offline in reverse. Instead of removing cells as the water rises, add cells back and maintain connected components with DSU.
The constraints allow dynamic programming over optimized states. The transition models the best decision under the card and status effects.
Use prefix sums and constructive conditions to decide whether the array can be rearranged to satisfy all constraints.
Handle cases separately and construct the permutation directly. The inverse-operation view helps keep the final result lexicographically controlled.
Maintain the six faces of the dice and update them after every operation. The solution is a direct state simulation.
For the complete explanations and reference code, see the Chinese version of this post.