A12646 | Strange device
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
It is an interactive problem.
Vasya enjoys solving quizzes. He found a strange device and wants to know how it works.
This device encrypted with the tree (connected undirected graph without cycles) with $n$ vertices, numbered with integers from $1$ to $n$ . To solve this quiz you should guess this tree.
Fortunately, this device can make one operation, using which you should guess the cipher. You can give the device an array $d_1, d_2, \ldots, d_n$ of non-negative integers. On the device, there are $n$ lamps, $i$ -th of them is connected with $i$ -th vertex of the tree. For all $i$ the light will turn on the $i$ -th lamp, if there exist such vertex of the tree with number $j \neq i$ that $dist(i, j) \leq d_j$ . Let's define $dist(i, j)$ as the distance between vertices $i$ and $j$ in tree or number of edges on the simple path between vertices $i$ and $j$ .
Vasya wants to solve this quiz using $\leq 80$ operations with the device and guess the tree. Help him!
Vasya enjoys solving quizzes. He found a strange device and wants to know how it works.
This device encrypted with the tree (connected undirected graph without cycles) with $n$ vertices, numbered with integers from $1$ to $n$ . To solve this quiz you should guess this tree.
Fortunately, this device can make one operation, using which you should guess the cipher. You can give the device an array $d_1, d_2, \ldots, d_n$ of non-negative integers. On the device, there are $n$ lamps, $i$ -th of them is connected with $i$ -th vertex of the tree. For all $i$ the light will turn on the $i$ -th lamp, if there exist such vertex of the tree with number $j \neq i$ that $dist(i, j) \leq d_j$ . Let's define $dist(i, j)$ as the distance between vertices $i$ and $j$ in tree or number of edges on the simple path between vertices $i$ and $j$ .
Vasya wants to solve this quiz using $\leq 80$ operations with the device and guess the tree. Help him!
输入格式
无
输出格式
In the beginning, your program should read one integer $n$ — the number of vertices of the tree which encrypts the device ( $2 \leq n \leq 1000$ ).
After that, you can make several operations in the following format. To do operation print a symbol"?" (without quotes) and $n$ integers $d_1, d_2, \ldots, d_n$ , separated by spaces after it. Please note, that for all $i$ you can only use the numbers, satisfying the inequality $0 \leq d_i < n$ . After that, you should read a string $s$ with length $n$ , consisting of symbols "0" and "1" (without quotes). For all $i$ the symbol $s_i$ is equal to "0", if the lamp on the device, connected with $i$ -th vertex of the tree is switched off and "1" otherwise.
After several operations, you should print guessed tree. To do it print the only symbol "!" (without quotes). In the next $n-1$ lines print $2$ integers $a_i$ , $b_i$ — indexes of the vertices connected by $i$ -th edge of the tree. This numbers should satisfy the conditions $1 \leq a_i, b_i \leq n$ and $a_i \neq b_i$ . This edges should form a tree, which is equal to the hidden tree. After that, your program should terminate.
It is guaranteed, that in each test the tree is fixed before and won't change depending on your program's operations.
Your program can make from $0$ to $80$ operations with the device and after that guess the tree equal with the hidden.
If your program will make more than $80$ operations it can get any verdict, because it will continue reading from closed input. If your program will make operation or print the answer in the incorrect format, it can get any verdict too. Be careful.
Don't forget to flush the output after printing questions and answers.
To flush the output, you can use:
- fflush(stdout) in C++.
- System.out.flush() in Java.
- stdout.flush() in Python.
- flush(output) in Pascal.
- See the documentation for other languages.
Hacks:
The first line should contain one integer $n$ — the number of vertices in the tree ( $2 \leq n \leq 1000$ ). Next $n-1$ lines should contain $2$ integers $a_i$ , $b_i$ — indexes of the vertices connected by $i$ -th edge of the tree ( $1 \leq a_i, b_i \leq n$ , $a_i \neq b_i$ ). All edges should form a tree. Be careful, extra spaces or line breaks are not allowed.
After that, you can make several operations in the following format. To do operation print a symbol"?" (without quotes) and $n$ integers $d_1, d_2, \ldots, d_n$ , separated by spaces after it. Please note, that for all $i$ you can only use the numbers, satisfying the inequality $0 \leq d_i < n$ . After that, you should read a string $s$ with length $n$ , consisting of symbols "0" and "1" (without quotes). For all $i$ the symbol $s_i$ is equal to "0", if the lamp on the device, connected with $i$ -th vertex of the tree is switched off and "1" otherwise.
After several operations, you should print guessed tree. To do it print the only symbol "!" (without quotes). In the next $n-1$ lines print $2$ integers $a_i$ , $b_i$ — indexes of the vertices connected by $i$ -th edge of the tree. This numbers should satisfy the conditions $1 \leq a_i, b_i \leq n$ and $a_i \neq b_i$ . This edges should form a tree, which is equal to the hidden tree. After that, your program should terminate.
It is guaranteed, that in each test the tree is fixed before and won't change depending on your program's operations.
Your program can make from $0$ to $80$ operations with the device and after that guess the tree equal with the hidden.
If your program will make more than $80$ operations it can get any verdict, because it will continue reading from closed input. If your program will make operation or print the answer in the incorrect format, it can get any verdict too. Be careful.
Don't forget to flush the output after printing questions and answers.
To flush the output, you can use:
- fflush(stdout) in C++.
- System.out.flush() in Java.
- stdout.flush() in Python.
- flush(output) in Pascal.
- See the documentation for other languages.
Hacks:
The first line should contain one integer $n$ — the number of vertices in the tree ( $2 \leq n \leq 1000$ ). Next $n-1$ lines should contain $2$ integers $a_i$ , $b_i$ — indexes of the vertices connected by $i$ -th edge of the tree ( $1 \leq a_i, b_i \leq n$ , $a_i \neq b_i$ ). All edges should form a tree. Be careful, extra spaces or line breaks are not allowed.
输入输出样例
输入 #1
5 00000 11011 11100 10010
输出 #1
? 0 0 0 0 0 ? 1 1 2 0 2 ? 0 0 0 1 0 ? 0 1 0 0 1 ! 4 2 1 5 3 4 4 1
It is a picture of the tree which encrypt the device from the first test:
It is a table of pairwise distances between vertices in this tree:
- If you make operation where $d = [0, 0, 0, 0, 0]$ , no lamp will switch on, because $dist(i, j) > 0$ for all $i \neq j$ .
- If you make operation where $d = [1, 1, 2, 0, 2]$ , all lamps except the lamp connected with the $3$ -rd vertex will switch on. For example, lamp connected with the $1$ -st vertex will switch on, because $dist(1, 5) = 1 \leq 2 = d_5$ .
- If you make operation where $d = [0, 0, 0, 1, 0]$ , all lamps except lamps connected with the $4$ -th and $5$ -th vertices will switch on.
- If you make operation where $d = [0, 1, 0, 0, 1]$ , only lamps connected with the $1$ -st and $4$ -th vertices will switch on.
It is a table of pairwise distances between vertices in this tree:
- If you make operation where $d = [0, 0, 0, 0, 0]$ , no lamp will switch on, because $dist(i, j) > 0$ for all $i \neq j$ .
- If you make operation where $d = [1, 1, 2, 0, 2]$ , all lamps except the lamp connected with the $3$ -rd vertex will switch on. For example, lamp connected with the $1$ -st vertex will switch on, because $dist(1, 5) = 1 \leq 2 = d_5$ .
- If you make operation where $d = [0, 0, 0, 1, 0]$ , all lamps except lamps connected with the $4$ -th and $5$ -th vertices will switch on.
- If you make operation where $d = [0, 1, 0, 0, 1]$ , only lamps connected with the $1$ -st and $4$ -th vertices will switch on.
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted