The IOI 2011 Competition - Practice Tasks

Alphabets


You would like to transmit integer data through a special channel, i.e., this channel only supports transmission of alphabets a - z. In order to do so, you have to encode the data into a sequence of alphabets, transmit the encoded data, and decode it to obtain the original integer data.

The overall process is shown in the following figure.

process overview

Your task

You have to implement:

Example

Consider as an example the case where N = 3, and D = 10 20 30.

Procedure encode, using some strange method, may encode the message as axsdxa; it should call procedure send_data as follows:

send_data('a')
send_data('x')
send_data('s')
send_data('d')
send_data('x')
send_data('a')

Note that the data length M = 6. When decode calls procedure read_data, the return values are:

callsreturns
read_data()'a'
read_data()'x'
read_data()'s'
read_data()'d'
read_data()'x'
read_data()'a'

The decode procedure should produce the output by calling procedure output_data as follows.

output_data(10)
output_data(20)
output_data(30)

Remarks: the encoded message here is chosen randomly to illustrate the task idea.

Subtasks

Subtask 1 (30 points)

Subtask 2 (30 points)

Subtask 3 (40 points)

Implementation details


Hottest


Thailand is a tropical country. Thai people usually say that Thailand has 3 seasons: Hot Summer, Hotter Summer, and Hottest Summer. It especially feels very hot when you have many consecutive days with high temperatures.

You are planning a K-day trip to Thailand. Since you would like to experience the real Thai Summer, you want your stay to be as hot as possible.

You are given a list of forecasted temperatures of N consecutive days. You would like to find the maximum sum of temperatures of K consecutive days. It is guaranteed that 1 <= K <= N.

Your task

You are to implement procedure maxk(N,T,K) that returns the maximum sum of temperatures of any K consecutive days, where N is the number of days and T is an array of positive integers where T[i], for 0 <= i < N, is the temperature of day i.

Example

Suppose that N=6, K=3 and T = 10 50 30 20 5 1.

There are 4 possible 3-day trips, starting from day 0, day 1, day 2, and day 3; and their sum of temperatures are 90, 100, 55, and 26. Therefore, procedure maxk should return 100.

Subtasks

Subtask 1 (50 points)

Subtask 2 (50 points)

Implementation details


Valley


Animal behavior researchers would like to get information on animal movements in a valley. They have placed N motion sensors along a straight line crossing the valley at various heights. For 0 <= i <= N-1, the i-th sensor's height is hi (0 <= hi <= 1 000 000 000). No two sensors are on the same height.

Since the line is on a valley, the heights of sensors satisfy these constraints:

However, because the sensor installation team forgot to measure the sensors' heights, the value of k, and all the heights hi's are not known.

You would like to find if there is a sensor at height X. This seems to be hopelessly impossible, but you recall that each sensor has a height meter and can report its height. To minimize the power usage, you would like to make only a small number of height queries.

Your task

You have to implement procedure find(N,X) that returns 1 if there exists a sensor at height X and returns 0 otherwise. Your procedure can call a procedure query(i) to get hi. However, you can make at most 50 calls, for each run of procedure find.

Note: In a single run, the sample grader, provided with the prototype, may perform many calls to find in one run. While the sample grader uses the same heights for all calls, the real grader may use different heights between each call to procedure find. Therefore, you should not assume that two different calls to procedure find share the same height information.

Example

Suppose that N=4 and the height of each sensor is:

sensorheight
010
17
29
315

Note that in this case, k=1. The following are the return values from procedure query:

callsreturns
query(0)10
query(1)7
query(2)9
query(3)15

The correct implementation of procedure find, when called by the grader, should return as in the following table.

callsreturns
find(4,10)1
find(4,2)0
find(4,9)1
find(4,15)1
find(4,100)0

Subtasks

Subtask 1 (25 points)

Subtask 2 (25 points)

Subtask 3 (25 points)

Subtask 3 (25 points)

Implementation details