Japanese Olympiad in Informatics (JOI) Spring Camp 2017

Revision en8, by joisino, 2017-03-30 14:42:03

Hello Codeforces!

Japanese Olympiad in Informatics Spring Camp 2017 will be held from Mar. 19 to Mar. 25.

There will be four online mirror contests during the camp.

The contest duration is 5 hours and there are 3 to 4 problems in each day. Problem statements will be provided both in Japanese and English this year.

There might be unusual tasks such as output-only tasks, optimization tasks, reactive tasks and communication tasks, just like International Olympiad in Informatics (IOI).

Details are available in contest information.

Good luck and have fun!


We will use CMS (customized version) on our server to hold the contests. The registration URL will be announced just before the first contest.

Providing English statements is our first trial for this year, so there aren't past English problems. If you try past problems with Google Translate, you can get them from here.


Registration is available now.


The contests are over. The judge is open now. You can submit your codes in the contest page.

Unofficial Simple Editorial:

  • cultivation: East and West wind have almost the same effect. You don't have to consider the order. The essential value is the sum of the number of east and west wind. The candidates of this value are O(N2). You can easily calculate how many north wind and south wind needed to fill each column. The number of the essential columns are O(N). So you can solve this by O(N3logN) or O(N3) with precalculate.
  • port facility: Let's assume the containers nodes and make edges between the nodes which can't put on the same area. If this graph is bipartite, The answer is 2^(#connected compornent). Otherwise, the answer is 0. First, count the connected component. Sort containers and use Segmenttree, then you can BFS with O(NlogN). You can check wheather the graph is bipartite by just simulating the transportation.
  • sparklers: The first insights are you can do binary search the answer v, no two persons don't have to burn sparklers simultaneously and burning sparklers looks like an interval. If you can merge [l, r - 1] or [l + 1, r] and (Xr - Xl) / v ≤ (r - l)T, then you can merge [l, r). You can do some greedy algorithm to check you can merge [0, n)
  • arranging tickets: Open the circle at point 0. You can use binary search by determining the answer m. You don't have to flip the interval [a, b], [c, d] such that a < b < c < d. So Filipped interval share some point t. Let's determin t and the number of flipped interval n. Actually, the candidate of n is at - m and at - m + 1. ( ai is the sum of initial passengers through point i), the candidate of t is leftmost and rightmost argmax ai. You can greedily determin flipped intervals.
  • broken device: Divide bits into groups of size 3. There is a code of 3bits that translate 2 bit if intact, 1bit if 1 bit lost, 0 bit if more bits lost.
  • railway trip: If you make edges to adjacent greater stations, It looks like a tree. You can use doubling to answer queries quickly.
  • coach: Sort refilling points by SimodT and passengers by by Di together. Each adjacent refilling points can purge passengers between them from the back. You can do DP and you can fasten DP by convex hull trick.
  • long mansion: Let Llink_i be the rightmost j s.t. j ≤ i and ci is in Aj. Rlink_i is alike. Then JOI-kun can't go out from [l, r] iff Llinkr < l and r < Rlinkl. Let Lretr be min{ l | Llink_r < l and r < Rlink_r }. Then JOI-kun can't go from L to R iff there exists r s.t. L ≤ r < R and Lret[r] ≤ L. You can use segtree to speed it up.
  • natural park: Let's consider the case of tree. You can add node one by one. First, you can determin wheter the node connects currect tree directly. If Yes, Number the tree nodes BFS order, then you can binary search which node connects the node directly. If No, binary serch a node between this node and the current tree, and solve recursively. In the case of general graph, you can solve with almost the same solution.
  • abduction 2: Memoize. If you speed up finding the street with sparse table, you can get AC. Time complexity analysis is a little complicated. This margin is too narrow to contain. If you want to know, you shold read the Japanese editorial slide.
  • city: Index the nodes by euler-tour order. Encode nodes by pair of the id and interval length. Sum of the number of the descendants of each nodes are at most 18 N. So most of the lengths are very small. Representing length like 1.05n ( if you can't, add dummy nodes ) is very efficient in this case.
  • dragon 2: Sort points by the angles from X. sweep them by the angle. Use segtrees or BITs to manage current points by the order of the angle from Y. You can now answer queries efficiently. Sqrt decompose queries by the size, you can solve with O(NsqrtQlogN)


The score distribution and official editorial slides (Japanese) are distributed.



  Rev. Lang. By When Δ Comment
en8 English joisino 2017-03-30 14:42:03 285 Tiny change: '$a_t - m$ or $a_t - m ' -> '$a_t - m$ and $a_t - m '
en7 English joisino 2017-03-26 04:07:26 58
en6 English joisino 2017-03-24 17:01:39 10
en5 English joisino 2017-03-24 16:58:47 3765 Tiny change: 'ink_r < l $and$ r < Rlink' -> 'ink_r < l {rm and} r < Rlink' (published)
en4 English joisino 2017-03-24 07:16:15 143 (saved to drafts)
en3 English joisino 2017-03-20 03:21:52 142
en2 English joisino 2017-03-19 11:05:36 414 Tiny change: 'fun!\n\n\nUPD1:\nWe will ' -> 'fun!\n\n\n**UPD1:**\n\nWe will '
en1 English joisino 2017-03-16 11:21:08 1275 Initial revision (published)