Codeforces Round 407 (Div. 1)
D
Finding lines
Codeforces
3000
原题
← CE →
翻译中…

After some programming contest Roma decided to try himself in tourism. His home country Uzhlyandia is a Cartesian plane. He wants to walk along each of the Main Straight Lines in Uzhlyandia. It is known that each of these lines is a straight line parallel to one of the axes (i.e. it is described with the equation $*x* = *a*$ or $*y* = *a*$, where $*a*$ is integer called the coordinate of this line).

翻译中…

Roma lost his own map, so he should find out the coordinates of all lines at first. Uncle Anton agreed to help him, using the following rules:

翻译中…
  • Initially Roma doesn't know the number of vertical and horizontal lines and their coordinates;
  • Roma can announce integer coordinates of some point in Uzhlandia, and Anton then will tell him the minimum among the distances from the chosen point to each of the lines. However, since the coordinates of the lines don't exceed $10^{8}$ by absolute value, Roma can't choose a point with coordinates exceeding $10^{8}$ by absolute value.
翻译中…

Uncle Anton is in a hurry to the UOI (Uzhlandian Olympiad in Informatics), so he can only answer no more than $3·10^{5}$ questions.

翻译中…

The problem is that Roma doesn't know how to find out the coordinates of the lines. Write a program that plays Roma's role and finds the coordinates.

翻译中…

Input

翻译中…

There is no input initially. Your program should make queries to get information.

翻译中…

It is guaranteed that the number of horizontal and vertical lines is at least $1$ and less than or equal to $10^{4}$ for each type.

翻译中…

Interaction

翻译中…

To make a query, print a line "0 x y" (-$10^{8} ≤ *x*, *y* ≤ 10^{8}$), where $*x*$ and $*y*$ are the coordinates of the point. After each query you need to print end-of-line, make "flush" operation, and then read the answer to the query — the minimum among the distances prom this point to the Main Straight Lines of Uzhlyandia.

翻译中…

You can do no more than $3·10^{5}$ queries.

翻译中…

When you are ready to print the answer, print three lines:

翻译中…
  1. In the first line print "1 n m", where $*n*$ is the number of vertical lines (parallel to $*OY*$), and $*m*$ is the number of horizontal lines (parallel to $*OX*$).
  2. In the second line print $*n*$ integers $*x*_{1}, *x*_{2}, ..., *x*_{*n*}$ — the coordinates of the vertical lines.
  3. In the third line in the same format print $*m*$ integers $*y*_{1}, *y*_{2}, ..., *y*_{*m*}$ — the coordinates of the horizontal lines.
翻译中…

You can print coordinates in arbitrary order.

翻译中…

To make "flush", you can use (just after printing a query/answer and end-of-line):

翻译中…
  • fflush(stdout) in C++;
  • System.out.flush() in Java;
  • stdout.flush() in Python;
  • flush(output) in Pascal;
  • see the documentation for other languages.
翻译中…

You will get Wrong Answer if you make more queries than allowed or make an invalid query.

翻译中…

You can get Idleness Limit Exceeded if you don't print anything or if you forget to flush the output.

翻译中…

If at any moment your program reads -1 as an answer, it should immediately exit normally (for example, by calling exit(0)). You will get Wrong Answer in this case, it means that you made more queries than allowed, or made an invalid query. If you ignore this, you can get other verdicts since your program will continue to read from a closed stream.

翻译中…

Making test for hacking

翻译中…

The first line should contain two integers $*n*$ and $*m*$ ($1 ≤ *n*, *m* ≤ 10^{4}$).

翻译中…

The second line should contain $*n*$ distinct integers $*x*_{*i*}$ (-$10^{8} ≤ *x*_{*i*} ≤ 10^{8}$) — the coordinates of the vertical lines.

翻译中…

The third line should contain $*m*$ distinct integers $*y*_{*i*}$ (-$10^{8} ≤ *y*_{*i*} ≤ 10^{8}$) — the coordinates of the horizontal lines.

翻译中…

You can write coordinates in arbitrary order.

翻译中…

You can see the example case in the notes.

翻译中…

Note

翻译中…

The example test is

翻译中…

1 2
2
0 -3

翻译中…

The minimum distances are:

翻译中…
  • from $(1, 2)$ to $*x* = 2$;
  • from $( - 2, - 2)$ to $*y* = - 3$;
  • from $(5, 6)$ to $*x* = 2$;
  • from $( - 2, 2)$ to $*y* = 0$.
翻译中…

样例

Input #1
1
1
3
2
Output #1
0 1 2
0 -2 -2
0 5 6
0 -2 2
1 1 2
2
0 -3
InputCopy OutputCopy
题目信息
题号
788D
时间限制
3 s
内存限制
256 MB
标签
构造
分治
交互题

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。