Блог пользователя ikbal

Автор ikbal, 11 лет назад, По-английски

The team selection contest for IOI 2015 happened on the last weekend. It is an IOI style contest. There are two days and each day has 3 problems for 5 hours. Here are the short statements of the problems:

UPD: I have added problems of the second day too.

DAY 1

Problem 1

There is a rooted tree with N ≤ 105 nodes and there are M ≤ 105 queries. Initially, all the nodes have the value 0. There are two types of queries. First one gives you two nodes a and b. For every node lying on the path from a to b you need to increase all values of the nodes in its subtree. Notice that you might have increased one of the node's value several times. The Second one gives two nodes a and b as well, and asks you to calculate the sum of subtrees of all the nodes lying on the path from a to b. You need to print the answers for second queries at modulo 10009.

Problem 2

There are Q ≤ 2.105 queries. Each of them is in one of the following formats: "PUSH x, v", "POP x". There is an empty tree in the beginning. "PUSH x, v" means add a new node to the tree with the last unused id(which is the number of PUSH'es so far plus one), and make its parent x, v denotes the value of the node. "POP x" means delete the node with id x from the tree. Every POP operation guarantees that x has no parent at the time of the operation. For each PUSH operation, you need to calculate the minimum value of the x's parents.

Problem 3

There are N ≤ 50 sticks. You need to create a square by choosing a subset of them.

Each of them has a lenght 1 ≤ ai ≤ 50 and also .

DAY 2

Problem 1

There is a grid with N ≤ 106 rows and M ≤ 106 columns. There are C ≤ 25000 carrots. Input provides you xi, yi and vi, which denotes row number of the ith carrot, column number of the ith carrot and taste value of the ith carrot. You are helping a rabbit to travel in the grid. There is an integer K given in the input. Our rabbit can jump K steps down or K steps right. The weird thing is if he jumps out of the grid he returns to the grid from the opposite side.

More formally if rabbit is on (x, y) then he can go to ((x + K) mod N, y) or (x, (y + K) mod M). Our rabbit can not jump more than T times. In the beginning, you will put the rabbit into any cell. And rabbit will travel in the grid freely. The problem asks you to calculate the maximum possible difference between highest value and lowest value of taste that our rabbit has eaten during the travel.

Problem 2 (Time limit for this problem was 5 seconds.)

There is a sequence of integers ai ≤ 105 with size N ≤ 105. There are M ≤ 105 queries. Each query gives to you two integers L and R, after then asks you to calculate the maximum value of the interval that belongs to [L, R].

More formally you will choose l and r where L ≤ l ≤ r ≤ R. Value of the interval [l, r] can be calculated with this pseudo code :

res = a[l]
last = a[l]
for i = l + 1 to r:
  if(last > a[i])
    for j = a[i] to last - 1:
      res = res ^ j;
  else
    for j = last + 1 to a[i]
      res = res ^ j.
  last = a[i]

"^" denotes xor. Res equals to the value of the [l, r] after the process.

Problem 3

There is a tree with N ≤ 105 nodes and there are K ≤ 10 good digits. The problem asks you to calculate number of pairs of nodes that the distance between them consist of only good digits.


PS. First problem from the first day is one of my favorites. I would like to see your thoughts about problems as well. Feel free to ask any questions..

  • Проголосовать: нравится
  • +111
  • Проголосовать: не нравится

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

link to problems ?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

Did you have full feedback during the contest? (IOI-style)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Hello,

I don't really understand Problem 2. Can you please clarify? Firstly, it seems that you start with a tree with single node of id 1 instead of an empty tree? Otherwise how does the first push operation work?

Secondly, is my understanding of the operations correct?

  1. (PUSH, x, v). Suppose this is the (k-1)th push operation. Add node k to the tree and set node x as the parent of node k. Make the value of node k to be v.

  2. (POP, x). Remove node x. We know that x has no parents.

If this is correct, it seems to be that we will have a tree (or forest), and so every node has a single parent?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

What were the time limits? (Looking at problem 3)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

1st and 2nd both LCT problems?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

So who are in the Turkish IOI Team this year? :)

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How many points did you get (for each problem)?

»
11 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

day1 problem 3, as I understand, stick is 1xa[i] dimension. Are we allowed to use a[i]x1 as well?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Problem 1 — Day 2: "Our rabbit can jump K steps down or K steps right". I think it should be "and" in stead of "or" in this sentence, right?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +20 Проголосовать: не нравится

First problem from the first day is one of my favorites, too. :D Are there any solutions better than O(N*sqrt(N)) for that problem?

»
11 лет назад, скрыть # |
Rev. 5  
Проголосовать: нравится +7 Проголосовать: не нравится

Day 1 Q 1: Split the quiries into sqrt(Q) blocks so we will get a O(sqrt(Q)) version tree to solve. Rebuild data after this block.

Q2: 2^k parent with lgnlgn per query

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

What is the complexity of your Day 2 Problem 2 code?

Is it O(N * sqrt(N) * log(N)) ?