The Asia-Pacific Informatics Olympiad 2026 is just around the corner — scheduled for May 9th and 10th, 2026, and will be organized by Taiwan.
For those who haven’t heard of it, APIO is a prestigious IOI-style online contest featuring 3 challenging tasks over 5 hours. It's an important part of the IOI team selection process for many countries across the Asia-Pacific region.
More info is available at APIO 2026 Official Website.
Feel free to use the comments to discuss problem ideas, scores, cutoffs, and results after the contest (and any mirror, if there is one) wraps up.
Good luck to everyone participating — hope it’s a fun and insightful contest!








Is there any mirror contest of APIO 2026 to participate?
Today is the first day of the olympiad, i guess u can find it after it finishes, on sites like qoj.ac
The problems have been uploaded to QOJ. You may upsolve them at https://qoj.ac/contest/3763.
Problem statements are not complete yet.
Any tips?
It seems that the APIO 2026 tasks used in China were different from the international version used by other participating countries/regions. Since the official APIO 2026 tasks have not been published yet, this is only an inference, but the Chinese version was based on individual test points, while the international version used subtasks.
To clarify, I'm not saying this has been officially confirmed.
Update: It's true. You can solve the tasks of Chinese APIO on Luogu.
Is task 3 in C prefix sums? tried using it, didnt work.
The contest window is over. How did everyone do? It seems that this year's contest was one of the hardest.
Yeah! I though of getting a full solve on Bikes and literally got only 4 points!!!
Then i was trying to solved the subtask where there is only one A[i] > 0, can anyone please tell me what was my mistake:
How to solve each subtssk for C?
I was only able to get subtasks 1 through 4 in contest. I still lowkey don't know how to get subtasks 5 and 6.
Have the first person keep eating the pancakes. The second guy will keep eating until he sees an already finished bag of pancakes, in which case he stops. The process of extracting the allergens is trivial. (Why?)
For subtasks 2, 3, and 4 (and I assume for the rest of the problem), we have that the person who has the $$$p$$$-th flavor as their allergy eats the $$$(p + 1 \bmod n)$$$th flavor to convey what index they are. Let $$$v = p + 1 \bmod n$$$.
Eat the $$$v$$$th flavor $$$n-r$$$ times (these are in separate bags). So, if $$$n=5$$$, I am in room 0, and get flavor 4, I eat the 0th flavor 5 times.
Then, we can use the frequency of how many times a flavor was eaten to retrieve the allergens.
Let $$$v = p + 1 \bmod n$$$.
Since every block is a permutation, let's split our info into $$$n$$$ blocks and stagger what each person get. We can create an algorithm that guarantees the following:
The general algorithm goes as follows:
Again, let $$$v = p + 1 \bmod n$$$.
The case of $$$n = 2$$$ is dealt with using Subtask 1. Hence, assume $$$n \ge 3$$$.
We reserve the first $$$n+1$$$ bags to denote how many people have passed. With this, it is always possible to take at least one pancake. Therefore, we can correctly extract $$$r$$$. We use that to eat $$$n-r$$$ pancakes of flavor $$$v$$$...
Unless if flavor $$$v$$$ itself appeared $$$n$$$ times in the first $$$n+1$$$ bags, as now we can't report our room! In that case, we realize that the flavor $$$v+1 \bmod n = p+2 \bmod n$$$ can be used! We can do the following if all of the flavor $$$v$$$ pancakes get eaten after the first $$$n+1$$$ rooms:
Implementation for allergen retrieval is a bit tedious, but it is doable.
Thanks for sharing!
I got the first 4 subtasks, but I want to share some slightly different approaches for subtasks 2, 3, and 4.
Similar, but only eat the $$$r$$$ th pancake of type $$$v$$$. Then, you can figure out the order by looking at which $$$i$$$ th pancake was eaten.
To get the room number, divide the first group, for each person eat the first eatable pancake. With this, you can get the room number. Then, do the same with subtask 2 from $$$0$$$ to $$$N-2$$$. For $$$N-1$$$, the only person left is him.
In this one, try using only the first pancake to get the room number. For this, everyone except the person who can't eat it, eat a slice. Then, do the same thing again with subtask 2. So the only thing you need to pay attention to in prediction is: Two different pancakes have the same order, but since one of them is $$$F_0$$$, put it in the first place.
I can't provide solutions for each subtask (I solved the entire problem right away), but since there are explanations for subtasks 1-4, I guess I'll share my full solution.
Each guest in a room looks at the first occurrence of a flavor. If it is eaten, that means this flavor is used by a previous guest, so ignore. If it is not eaten, then use this flavor, i.e. eat this first occurrence. Let this color be $$$q[i]$$$. He can convey his forbidden flavor $$$p[i]$$$ by eating the $$$p[i]$$$-th occurrence of $$$q[i]$$$. The guest outside can recover the array $$$q[i]$$$ just by looking at the sequence of flavors, and recover $$$p[i]$$$ by looking by the eaten bags.
For example, if the sequence of the flavors is $$$2, 1, 3, 3, 1, 2, 1, 0, 2, ....$$$ for $$$n=4$$$, then $$$q=[2,1,3,0]$$$.
The problem arises when the flavor that a guest wants to use is forbidden, i.e. $$$p[i]=q[i]$$$. In this case, take the next unused flavor $$$q[i+1]$$$, and eat the first and the $$$q[i+1]$$$-th bag of flavor $$$q[i+1]$$$. Then when the guest outside recovers $$$q[i]$$$ and $$$p[i]$$$, he finds that $$$q[i+1]=p[i+1]$$$ which should not happen (how can you eat a forbidden flavor?), so he knows that guest $$$i+1$$$ is actually guest $$$i$$$, and guest $$$i$$$ is guest $$$i+1$$$. Therefore, perform the substitution $$$p[i+1]:=p[i],p[i]:=q[i].$$$ If this happens to the last guest, then there is nothing he can eat, but that is fine, because when we get that the last flavor is unused we just set $$$p[n-1]:=q[n-1]$$$.
I think I can share an another solution for the problem here.
When a guest (suppose in room $$$i$$$) sequentially receives the bags of pancakes, he first needs to find the first flavor of pancakes (based on the bags' order of appearance) from which no slice has been eaten. Let this flavor be $$$x$$$. The guest will eat exactly $$$(P[i] - x + N) \pmod N$$$ slices of flavor $$$x$$$. Obviously, the number of slices the guest eats will not exceed $$$N - 1$$$, and if $$$P[i] = x$$$, the guest will not eat any slices.
The guests outside the rooms need to aggregate the information to reconstruct array $$$P$$$ using the following steps:
First, the guests create an array $$$Q[0], Q[1], \dots, Q[N - 1]$$$ representing the pancake flavors sorted by the order of their first appearance in the bags.
For each flavor, the guests count the number of eaten slices to form a sequence $$$T[0], T[1], \dots, T[N - 1]$$$, where $$$T[i]$$$ is the number of eaten slices of flavor $$$Q[i]$$$. By removing the trailing elements with a value of 0 from array $$$T$$$, we obtain an array $$$T'[0], T'[1], \dots, T'[L - 1]$$$, where $$$L \le N$$$.
Next, the guests create an array $$$C[0], C[1], \dots, C[L - 1]$$$, where $$$C[i] = (T'[i] + Q[i]) \pmod N$$$. It is easy to see that sequence $$$C$$$ is a (possibly non-contiguous) subsequence of sequence $$$P$$$ (though preserving the exact relative order), and the elements missing from sequence $$$C$$$ are caused by the guests who have $$$P[i] = x$$$.
Consider the last value of sequence $$$Q$$$ that does not appear in the current sequence $$$C$$$, let's assume it is $$$Q[j]$$$. This value is missing because there was a guest who was supposed to eat pancakes of flavor $$$Q[j]$$$, but this flavor was forbidden for that guest. For this guest to eat the pancake of flavor $$$Q[j]$$$, we have $$$j - 1$$$ other guests who got to eat before this guest. Therefore, we insert the value $$$Q[j]$$$ into index $$$j$$$ of the current sequence $$$C$$$. Repeat the process until $$$C$$$ contain all the values from $$$1$$$ to $$$N$$$. After all missing values are inserted into their correct positions, array $$$C$$$ becomes the original permutation $$$P$$$. The problem is solved.
Suppose $$$N=4$$$. The sequence of flavors appearing in order is $$$Q = [0, 1, 2, 3]$$$. The secret permutation is $$$P = [0, 2, 1, 3]$$$.
Process inside the rooms:
Process outside the rooms:
The final result accurately reconstructs the permutation $$$P = [0, 2, 1, 3]$$$.
This is a great problem btw, with lots of clever approaches. The official solution provide two more of them, I guess.
For q1, I wrote a dp solution for $$$N\le 5000$$$ but it got wrong answer, and I thought for a long time for why my solution is wrong, but I cannot disprove the solution nor find a countercase. After the contest, some other participants from Hong Kong told me that they also had the same problem. Moreover, some of them wrote brute force solution for a subtask (iirc its subtask 2) and they said their submission gave different verdict with some irrelevant changes in the code.
Did anyone face the same problems like us? I don't know whether the task is really that tricky or it actually has problems in the test data.
Upd: thanks to this comment, I understand why my solution is wrong. Sorry for doubting about the correctness of test data.
Can you describe your idea?
Same as this
Nvm it's wrong.
I and some other people did implemented exactly this solution but we got wrong answer, as I said in this comment, and I really don't understand why it was wrong
nvm it's wrong tho
can you state it please?
Let the graph be a line graph with $$$A = [1,1,0,2,0,0]$$$, $$$B = [0,0,3,0,0,1]$$$, so the nodes' values are $$$[1,1,-3,2,0,-1]$$$.
In your construction, $$$G$$$ is $$$0 \rightarrow 1 \rightarrow 2 \leftarrow 3 \rightarrow 4 \rightarrow 5$$$, so your answer is $$$2 \times 5 - 2 = 8$$$. However, a shorter path is $$$X = [0,1,2,3,2,3,4,5]$$$ and $$$Y = [-1,-1,0,-2,3,0,0,1]$$$.
Thank you. Looks like the problem is much more complex than I thought.
Thanks for that example, I also understand why this solution is wrong :( not test data problem :(
This task is harder then I thought
It seems that mainland China has a unique APIO. Problems are different from other countries or regions.
196 points are needed to win the gold medal (top 75).
Does this year's APIO have rankings of all participants (including unofficial ones)?
when are the rankings published?
how many points did u guys/people from ur country do?
Egypt's top 6 results
contee 108.ish (24/37.ish/47)
Octagons 31 (13/18/0)
_As3ad 31 (2/0/29)
Ahmed_Solyman 28 (15/6/7)
Baraa-Ahmed 27 (0/20/7)
ASGA_RedSea 20 (0/20/0)
Turkmenistan top 5 result:
Kasym Kochekov (B00BS) — 112 point (actually dominated)
Jelaleddin Narkulyev (popcnt) — 24 point
Akmuhammet Shohratgeldiyev (Whitemuha) — 22 point
Hojamuhammet Hydyrov (MuhammetH) — 11 point
Yhlas Amanmyradov (stdfloat) — 6 point
68 (4 56 8)
Uzbekistan's top 6 results:
Uzbekistan top6 results:
How much did you get khba ?
how much u got?
4
[deleted]
[deleted]
[Deleted? (Because the comments above are deleted??)]
100
For problem B, I have some ideas that solve the first two subtasks completely and partially for the other subtasks, resulting in ~51 points. I'm wondering how to get more points. My approaches:
There is only one village. If it is leaf, color every edge is 0 because there will be no queries. Otherwise, there are at least two edges, and that subtrees contain at least 1 power station, so the max size is 5. Use the color $$$\text{size} - 1$$$. This allows you to use $$$S=5$$$, resulting in 6 points.
Extract the line and use fixed cycles (such as $$$0, 1, 2, 3, 0,...$$$) for all groups between power stations or ends, to calculate the count in both directions. Consider using the cycle $$$[0,1,2,3]$$$ for sizes of $$$0$$$ or $$$6$$$, $$$[0,2,4]$$$ for $$$1$$$ or $$$5$$$, $$$[1,3,4]$$$ for $$$2$$$ or $$$4$$$, and $$$[0]$$$ for $$$3$$$. This yields 14 points, with $$$S=5$$$. For example: If we see $$$[0,2]$$$, $$$[2,4]$$$, or $$$[4,6]$$$ in this order, we know the answer is $$$[1, 5]$$$. Otherwise, just reverse the order.
Root from a power station and use $$$C_i = (\text{dep}_v \mod 3* 7 + \text{siz}_v)$$$. Then, using the division by $$$7$$$, you can determine which edge will go the parent, as well as the size. This results in $$$S=21$$$.
Root at centroid of the tree (using subtree sizes = number of stations in subtree). This ensures every size <= 3 and you get solution with S = 12.
if size = 3, we can just assume it is a child, this will not change the answer since 6 — 3 = 3. Thus, we can keep a single state, giving S = 10.
Since B is large enough, we can use depth modulo 2 instead of 3. To determine if the edge is parent or child just count the number of edges in both modulo classes. Since count of child edges is always greater, we can identify if it is child edge or parent edge. This gives S = 7.
This achieves 70 points in total.
Solution for B subtasks 3 and 4
Direct the edges alternately. For each edge, we will write the number of power stations it's pointing at. Now we either get the correct value of each edge, or $$$k$$$ minus the correct value of each edge. We can check if the edges are pointing the right way by seeing if the sum is $$$k$$$. We only use values between $$$0$$$ and $$$6$$$, so $$$S = 7$$$.
This can also be extended to the general case to achieve $$$S=14$$$:
For nodes of degree $$$2$$$, the sum of labels on the edges is always $$$k$$$, so we need to find a way to differentiate between the two types of nodes (all edges pointing outwards or all edges pointing inwards).
Consider adding $$$k+1$$$ to the labels of edges at depth congruent to $$$0$$$ or $$$1 \pmod 4$$$. Notice that a degree $$$2$$$ node has its adjacent edges pointing towards it if and only if it has an even number of adjacent edges that have label $$$\geq k+1$$$. Now that we can figure out the parity of the depth of a degree $$$2$$$ node based on the labels, we can proceed with the same solution as subtasks 3 and 4.
Dear apio, publish the ranking💢
Türkiye: (Not all, but probably enough to get an idea because some other participants didn't give exact scores, they're probably in the [25, 60] range.)
ItsNotMeItsYou — 117.71(=24+46.71+47)
carcinisation — 112(=12+0+100)
mutlu — 81(=4+56+21)
Synd209 — 68.5(=19.5+2+47)
int23_t — 68.38(=0+35.58+33)
PieArmy — 28(=13+0+15)
Syria top 6 (as far as I know)
1- Ibrahim Fostok 68 Fostok
2- Hadi Suleiman 58.72 edogawa_something
3- Abdalrhman Sfar 42 Abdalrhman
4- Mohammad Diaa Srouji 33 NoVaLux
5- Kamal Alfakir 15 terminatorCM
6- Ahmad Salman 15 Ahmad_salman
Bangladesh's top 6:
Aritro Sarkar orz! 9th graders dominating OI!
bruh
I only got 10 points :sob:
Source? Where did you get these numbers?
The TST spreadsheet
very nice
oh noooo
now everyone will see how bad I performed :sob:
Aritro_ orz
APIO 2026 is worst APIO
APIO2026 Problems => here
Kazakhstan top6 results:
Wansur — 178(= 24 54 100)
is_i — 106.5(= 6.5 0 100)
ImDMka — 97(=13 37 47)
Aldk — 86.22(=4 53.22 29)
ahyeon — 81(=13 0 68)
WansurMyKing667 — 66(=13 6 47)
so since unoficial results is taking so long to get released, i made a form which i will convert to a sheet, feel free to give u guys points or people u know!! https://forms.gle/AXTfLzPq8oSqeZYF7, i will share the sheets ASAP if theres many responders
edit: anyone who has filled the form can get the sheet by friending madmi1010 on discord and give ur name/screen shot of the form so i know u actually filled it.
edit 2: i added all the ones from this blog to the sheets aswell (now containing 80 people in the sheet)
Hey,how it's going?
around 30, since people are only bothered to know the result, instead of actually trying ton fill the form sadly
Singapore Top 3 (to the best of my knowledge):
literalchild: $$$100 + 58 + 29 = 187$$$
Tyx2019: $$$24 + 54/58 + 68 = 146/150$$$ (P2 submission judged after window ended)
Girrysnake: $$$2 + 0 + 100 = 102$$$
May Girrysnake explain his full solution in p3?
Repeatedly remove all leaves with $$$A[i] = B[i]$$$. For the rest of the solution, assume no such leaves exist. Let the value of a node $$$V(u)$$$ be $$$A[u] - B[u]$$$, and the value $$$V(S)$$$ of a set of nodes be the sum of values of nodes inside.
Observation 1: Suppose we have a set $$$S$$$ of nodes and a node $$$v \in S$$$. Also suppose the truck is at $$$v$$$ and has $$$x \geq -V(S)$$$ bikes. We can set $$$A[u] \leftarrow B[u]$$$ for all $$$u \in S$$$ and return to $$$v$$$, using $$$2 (|S| - 1)$$$ edges.
Sketch of Proof: Given a node $$$u$$$ adjacent to $$$v$$$, let the component of $$$u$$$ be the set of nodes in $$$S$$$ closer to $$$u$$$ than $$$v$$$. From $$$v$$$, visit the components of adjacent nodes in decreasing order of value.
At this point, it is easy to convince yourself that the solution in the spoiler is correct. The easiest way to dig yourself out of the trap is by writing a brute force.
Call a path $$$v_0, v_1, \cdots, v_m$$$ good if: for each $$$0 \leq u \lt m$$$, the subtree of $$$v_u$$$ rooted at $$$v_{u+1}$$$ has nonnegative value. The answer is the minimum value over all good paths of $$$2(N-1) - m$$$.
"Proof": Let $$$S_i$$$ be the set of nodes reachable from $$$v_i$$$, without passing through $$$v_j$$$ for any $$$j \neq i$$$. We start at $$$v_0$$$, then "correct" $$$S_0$$$ in $$$2(|S_0|-1)$$$ steps (see Observation 1), move to $$$v_1$$$, correct $$$S_1$$$ in $$$2(|S_1|-1)$$$ steps, move to $$$v_2$$$, correct $$$S_2$$$, and so on. This algorithm uses $$$m + \sum 2(|S_i| - 1) = 2(N-1) - m$$$ steps.
This solution is incorrect. For example, let the graph be a line graph with $$$A = [1,1,0,2,0,0]$$$, $$$B = [0,0,3,0,0,1]$$$.
The solution gives $$$m=2$$$ and $$$k=2 \times 5 - 2 = 8$$$. However, a shorter path is $$$X = [0,1,2,3,2,3,4,5]$$$ and $$$Y = [-1,-1,0,-2,3,0,0,1]$$$.
The brute force will suggest that the optimal solution involves splitting the path into "parts", where multiple nodes on the path belong in the same "part", and using Observation 1 to "correct" them one-by-one. More formally, the optimal solution will be as follows: Pick a path $$$v_0, v_1, \cdots, v_m$$$. Split the interval $$$[0,m]$$$ into $$$p$$$ parts $$$[l_0,r_0] \cup [l_1,r_1] \cup [l_{p-1},r_{p-1}]$$$ (thus $$$l_0=0, r_{p-1}=m,l_{i+1}=r_i+1$$$). Let $$$S_i$$$ be the set of nodes $$$u$$$, such that the closest node $$$v_j$$$ to $$$u$$$ satisfies $$$l_i \leq j \leq r_i$$$. Then, the truck's path is $$$v_{l_0} \rightarrow \text{fix } S_0 \rightarrow v_{l_0} \rightarrow v_{l_0+1} \rightarrow \cdots \rightarrow v_{l_1} \rightarrow \text{fix } S_1 \rightarrow v_{l_1} \rightarrow \cdots \rightarrow v_{l_2} \rightarrow \cdots \rightarrow v_{l_{p-1}} \rightarrow \text{fix } S_{p-1} \rightarrow v_{l_{p-1}} \rightarrow \cdots \rightarrow v_{r_{p-1}}$$$.
For example, in the image below, the path is $$$v_0 \rightarrow \text{fix } S_0 \rightarrow v_1 \rightarrow \text{fix } S_1 \rightarrow v_1 \rightarrow v_2 \rightarrow v_3 \rightarrow v_4 \rightarrow \text{fix } S_2 \rightarrow v_4 \rightarrow v_5 \rightarrow v_6 \rightarrow \text{fix } S_3 \rightarrow v_6$$$.
Most edges are visited twice. The exceptions are $$$v_i \rightarrow v_{i+1}$$$, which is visited thrice if $$$[i,i+1] \subseteq [l_j,r_j]$$$ (call such edges bad), and visited once otherwise (call such edges good). Thus, our answer is $$$2(N-1) + (\text{# of bad edges}) - (\text{# of good edges})$$$.
For our partition to be valid, the value of $$$S_0 \cup S_1 \cup \cdots \cup S_i$$$ must be nonnegative, meaning that for any good edge $$$v_{r_i} \rightarrow v_{l_{i+1}}$$$, the value of the subtree of $$$v_{r_i}$$$ (rooted at $$$v_{l_{i+1}}$$$) is nonnegative. Thus, an edge $$$v_i \rightarrow v_{i+1}$$$ can be good if the subtree of $$$v_i$$$, rooted at $$$v_{i+1}$$$, is nonnegative; the edge must be bad otherwise.
We are now ready to solve this problem. Given a directed edge $$$x \rightarrow y$$$, let its evilness be $$$-1$$$ if the subtree of $$$x$$$, rooted at $$$y$$$, has nonnegative value, and $$$+1$$$ otherwise. Let the evilness of a directed simple path $$$v_0 \rightarrow v_1 \rightarrow \cdots \rightarrow v_m$$$ be the sum of evilness of its edges. The answer is then $$$2(N-1)$$$ plus the smallest evilness of a path, which can be found using tree rerooting DP.
To reconstruct $$$X$$$, we first find the good and bad edges, then split $$$[0,m]$$$ into intervals based on good edges. We may then follow the path described above of $$$v_{l_i} \rightarrow \text{fix } S_i \rightarrow v_{l_i} \rightarrow \cdots \rightarrow v_{l_{i+1}}$$$.
The easiest way to reconstruct $$$Y$$$, from a fixed $$$X$$$, is the following greedy algorithm: Take $$$A[X[i]]$$$ bikes at time $$$i$$$ if it is the first time we visit $$$X[i]$$$, and deposit $$$B[X[i]]$$$ bikes if it is the last time we visit $$$X[i]$$$.
Dear APIO Organizing Committee and tmt514,
We, the participants of APIO 2026, are eager to learn about the performance of all the participants of APIO 2026. In previous years, the unofficial rank list was typically released as soon as the contest window closed. It is disheartening to see that the unofficial rank list has not yet been released for over 29 hours since the contest window ended. Could you please release it now, or tell us when the unofficial ranklist will be released? The contestants would be very pleased if you could do that. Our anxiety is increasing every minute without the rank list.
Sincerely yours,
An APIO 2026 Participant
親愛的 APIO 籌辦委員會您好:
我們是 APIO 2026 的參賽者,非常希望能夠得知所有參賽者在 APIO 2026 的表現。往年通常會在比賽時段結束後立即公布非官方排名。然而令人遺憾的是,自比賽時段結束以來,至今已超過 29 小時,非官方排名仍尚未公布。 請問您們是否能夠現在公布非官方排名,或者告知我們預計何時會公布呢?若能如此,所有參賽者都將不勝感激。在沒有排名的情況下,我們的焦慮感正隨著每一分鐘不斷增加。
此致
敬禮
一位 APIO 2026 參賽者
Suppose that happens in IOI and you getting extra time to live there ;)).
Philippines: 97.22 / 86.72 / 39 / 30 / 23 / 19 / 19.
The three IOI 2025 contestants who took APIO 2026 got 97.22, 86.72, and 23, respectively.
Malaysia top 5:
It's a pity that Chinese mainlanders can't join interanoinal APIO because of politic reasons.
There's only a APIO(CA) and another three problems in mainland China.
Where did you get that information that it's due to politic reasons?
A representative of Chinese Computers Feduration in APIO(CA).
And it's obviously for us in fact.
You can visit here instead of waiting
Is this final and official?
Yes
That's not an official website. Where did they source their data from?
It is not official, but it does not mean it is fake
Not saying it's fake, but the data looks too good. I mean, did the website owner discover some secret ranking link that we haven't found yet?
how did they get the information? is it final and official?
I do not know how do they get information, but it is correct
Please note that this is NOT official.
The unofficial ranklist was shared with the delegation leaders earlier, and that is where the data came from.
Please wait until the official ranklist is released for the true final result, as there may still be appeals being raised by delegation leaders.
The ranking list, which has been shared with the delegation leaders, contains the data of all participants.
Please contact your delegation leader if you would like to see it.
unforgettablepl orz
Does anyone know when the official results get released here? Want to check how I placed as I was out of my delegation's top 6.
It seems they uploaded the final ranking, tasks, and editorials
Thanks! Do you know if the ranking of all participants (outside of top 6) also gets released?
Countries ranked by mean score:
The task files (statements, solutions, tests, etc.) for both the practice round and the official contest are now publicly available here:
You can also participate here:
We (blackyuki and Mitsubachi) are very honored that two of our tasks "bikes" and "party" were used in APIO 2026. We hope you enjoyed the tasks.
For task "bikes", the first challenging step is to come up with a polynomial time algorithm.
First, we fix our starting node $$$s$$$ and ending node $$$t$$$. We assume that all leaves have $$$A_i \neq B_i$$$, in which case we have to visit all nodes at least once. For each edge, we calculate the lower bound of how many times we have to use it. Then, for edges not on the $$$s$$$-$$$t$$$ path, we have to use that edge at least twice. For edges on the $$$s$$$-$$$t$$$ path, we cut the edge to get two subtrees, one containing $$$s$$$, and the other containing $$$t$$$ in it. In the case that the sum of $$$A_i-B_i$$$ for nodes in the subtree containing $$$s$$$ is negative, we have to use the edge three times. If not, we have to use it once. Actually, we can achieve this lower bound. Therefore, we try all pairs of $$$(s,t)$$$ to get an $$$O(N^3)$$$ solution. We speed this up using re-rooting dp to get an $$$O(N)$$$ solution. The details can be found in the official editorial.
fun fact: Actually, we also proposed this problem to EGOI before, and got rejected with the following feedback.
We think delivery is a nice DP problem that is very educational for training rerooting of DPs. However, for an EGOI problem, we are missing a bit of creativity.
Although we understand that this problem was not suitable for EGOI, we didn't think that the solution was typical, so we were afraid that the solution was well known outside of Japan. However, it turned out that only 6 official participants were able to reach full score.
For task "party", we have two completely different solutions.
The first solution is to force the $$$i$$$-th player to eat the $$$(i+1)$$$-th occurence of each flavor except for flavor $$$P_i$$$. If this is achievable, then the guesser can easily reconstruct $$$P$$$.
However, since each player doesn't know their own id, this is not simple. Our main idea is to dynamically update the prediction of their own id. First, we set $$$pred=0$$$. If the player sees an already eaten bag, assuming it is the $$$(t+1)$$$-th occurence of the same flavor, we set $$$pred=\max(pred, t+1)$$$. If the bag is uneaten and it is the $$$(pred+1)$$$-th occurence of the same flavor, then the player eats it.
For subtask 3, the guesser can easily reconstruct because for each $$$i$$$, there is at most one bag left uneaten among the $$$(i+1)$$$-th occurence of each flavor. The only problem is when bag $$$i\cdot N$$$ has flavor $$$P_i$$$, when the next player mistakenly eats it being unable to update their prediction. In that case, the guesser can conclude that $$$P_i$$$ is the flavor of bag $$$i\cdot N$$$ when all of the $$$(i+1)$$$-th occurence bags were eaten. Actually, a similar strategy with slight modification works for general $$$P$$$ to obtain full score.
Mitsubachi came up with a rather straight forward approach. We restrict player $$$i$$$ to only eat flavor $$$Q_i = (P_i+1) \bmod N$$$. We require player $$$i$$$ to eat the first occurrence of flavor $$$Q_i$$$ and send information using the remaining $$$N-1$$$ bags. The information to send is how many of the first occurrence bags were already eaten before the first occurrence of flavor $$$Q_i$$$. Actually, the guesser can restore $$$P$$$ only using this information, by a method similar to insertion sort.
Since we found the first solution more interesting, we tried to find a problem setting that only accepts the first solution, but we couldn't.
It seems that there exists some other solutions. I hope you enjoyed this problem!