CF1428H.Rotary Laser Lock

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is an interactive problem.

To prevent the mischievous rabbits from freely roaming around the zoo, Zookeeper has set up a special lock for the rabbit enclosure. This lock is called the Rotary Laser Lock.

The lock consists of nn concentric rings numbered from 00 to n1n-1 . The innermost ring is ring 00 and the outermost ring is ring n1n-1 . All rings are split equally into nmnm sections each. Each of those rings contains a single metal arc that covers exactly mm contiguous sections. At the center of the ring is a core and surrounding the entire lock are nmnm receivers aligned to the nmnm sections.

The core has nmnm lasers that shine outward from the center, one for each section. The lasers can be blocked by any of the arcs. A display on the outside of the lock shows how many lasers hit the outer receivers.

In the example above, there are n=3n=3 rings, each covering m=4m=4 sections. The arcs are colored in green (ring 00 ), purple (ring 11 ), and blue (ring 22 ) while the lasers beams are shown in red. There are nm=12nm=12 sections and 33 of the lasers are not blocked by any arc, thus the display will show 33 in this case.

Wabbit is trying to open the lock to free the rabbits, but the lock is completely opaque, and he cannot see where any of the arcs are. Given the relative positions of the arcs, Wabbit can open the lock on his own.

To be precise, Wabbit needs n1n-1 integers p1,p2,,pn1p_1,p_2,\ldots,p_{n-1} satisfying 0pi<nm0 \leq p_i < nm such that for each ii (1i<n)(1 \leq i < n) , Wabbit can rotate ring 00 clockwise exactly pip_i times such that the sections that ring 00 covers perfectly aligns with the sections that ring ii covers. In the example above, the relative positions are p1=1p_1 = 1 and p2=7p_2 = 7 .

To operate the lock, he can pick any of the nn rings and rotate them by 11 section either clockwise or anti-clockwise. You will see the number on the display after every rotation.

Because his paws are small, Wabbit has asked you to help him to find the relative positions of the arcs after all of your rotations are completed. You may perform up to 1500015000 rotations before Wabbit gets impatient.

输入格式

The first line consists of 2 integers nn and mm (2n100,2m20)(2 \leq n \leq 100, 2 \leq m \leq 20) , indicating the number of rings and the number of sections each ring covers.

输出格式

To perform a rotation, print on a single line "? x d" where xx (0x<n)(0 \leq x < n) is the ring that you wish to rotate and dd (d{1,1})(d \in \{-1,1\}) is the direction that you would like to rotate in. d=1d=1 indicates a clockwise rotation by 11 section while d=1d=-1 indicates an anticlockwise rotation by 11 section.

For each query, you will receive a single integer aa : the number of lasers that are not blocked by any of the arcs after the rotation has been performed.

Once you have figured out the relative positions of the arcs, print ! followed by n1n-1 integers p1,p2,,pn1p_1, p_2, \ldots, p_{n-1} .

Do note that the positions of the rings are predetermined for each test case and won't change during the interaction process.

After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded verdict.

To do this, use:

  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.

Hacks:

To hack, use the following format of test:

The first line should contain two integers nn and mm .

The next line of should contain n1n-1 integers p1,p2,,pn1p_1,p_2,\ldots,p_{n-1} : relative positions of rings 1,2,,n11,2,\ldots,n-1 .

输入输出样例

  • 输入#1

    3 4
    
    4
    
    4
    
    3

    输出#1

    ? 0 1
    
    ? 2 -1
    
    ? 1 1
    
    ! 1 5

说明/提示

For the first test, the configuration is the same as shown on the picture from the statement.

After the first rotation (which is rotating ring 00 clockwise by 11 section), we obtain the following configuration:

After the second rotation (which is rotating ring 22 counter-clockwise by 11 section), we obtain the following configuration:

After the third rotation (which is rotating ring 11 clockwise by 11 section), we obtain the following configuration:

If we rotate ring 00 clockwise once, we can see that the sections ring 00 covers will be the same as the sections that ring 11 covers, hence p1=1p_1=1 .

If we rotate ring 00 clockwise five times, the sections ring 00 covers will be the same as the sections that ring 22 covers, hence p2=5p_2=5 .

Note that if we will make a different set of rotations, we can end up with different values of p1p_1 and p2p_2 at the end.

首页