CF1838F.Stuck Conveyor

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

This is an interactive problem.

There is an nn by nn grid of conveyor belts, in positions (1,1)(1, 1) through (n,n)(n, n) of a coordinate plane. Every other square in the plane is empty. Each conveyor belt can be configured to move boxes up ('^'), down ('v'), left ('<'), or right ('>'). If a box moves onto an empty square, it stops moving.

However, one of the n2n^2 belts is stuck, and will always move boxes in the same direction, no matter how it is configured. Your goal is to perform a series of tests to determine which conveyor belt is stuck, and the direction in which it sends items.

To achieve this, you can perform up to 2525 tests. In each test, you assign a direction to all n2n^2 belts, place a box on top of one of them, and then turn all of the conveyors on.

One possible result of a query with n=4n=4 . In this case, the box starts at (2,2)(2, 2) . If there were no stuck conveyor, it would end up at (5,4)(5, 4) , but because of the stuck '>' conveyor at (3,3)(3, 3) , it enters an infinite loop.The conveyors move the box around too quickly for you to see, so the only information you receive from a test is whether the box eventually stopped moving, and if so, the coordinates of its final position.

输入格式

输出格式

You begin the interaction by reading a single integer nn ( 2n1002 \le n\le 100 ) — the number of rows and columns in the grid.

Then, you can make at most 2525 queries.

Each query should begin with a line of the form ? r c, where r and c are the initial row and column of the box, respectively.

The next nn lines of the query should contain nn characters each. The jj th character of the ii th row should be one of '^', 'v', '<', or '>', indicating the direction of conveyor (i,j)(i, j) for this query.

After each query, you will receive two integers xx and yy . If x=y=1x = y = -1 , then the box entered an infinite loop. Otherwise, its final position was (x,y)(x, y) .

If you make too many queries or make an invalid query, you will receive the Wrong Answer verdict.

After you have found the stuck conveyor and its direction, print a single line ! r c dir, where r and c are the row and column of the stuck conveyor, respectively, and dir is one of '^', 'v', '<', or '>', indicating the direction of the stuck conveyor. Note that printing this answer does not count towards your total of 2525 queries. After printing this line, your program should terminate.

The interactor is non-adaptive. This means that the location and direction of the stuck belt is fixed at the start of the interaction, and does not change after the queries.

After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded. 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 the documentation for other languages.

Hacks

To make a hack, use the following format.

The first line should contain a single integer nn ( 1n1001 \le n \le 100 ) — the number of rows and columns in the grid.

The next line should contain two integers rr and cc ( 1r,cn1 \le r, c \le n ), as well as a character dir\mathrm{dir} ( dir\mathrm{dir} is one of '^', 'v', '<', '>') — the position of the stuck conveyor and its fixed direction. These values should be separated by spaces.

输入输出样例

  • 输入#1

    3
    
    
    
    
    -1 -1
    
    
    
    
    0 2

    输出#1

    ? 2 2
    >><
    >>v
    ^<<
    
    ? 1 1
    >><
    >>v
    ^<<
    
    ! 1 2 ^
  • 输入#2

    4
    
    
    
    
    
    -1 -1

    输出#2

    ? 2 2
    v>v<
    ^v<v
    v>v^
    >v>v
    
    ! 3 3 >

说明/提示

For the first query of the first sample input, the box starts on (2,2)(2, 2) and enters an infinite loop containing rows 22 and 33 . Because the stuck conveyor is in row 11 , it does not affect the outcome of the query.

For the second query of the first sample input, the conveyors are configured in the same way, but the box starts on (1,1)(1, 1) . If there were no stuck conveyor, it would enter an infinite loop between (1,2)(1, 2) and (1,3)(1, 3) . However, the stuck conveyor redirects it to (0,2)(0, 2) .

After these two queries, the program is able to determine that the stuck conveyor is at (1,2)(1, 2) and directs items upward.

The query for the second sample input corresponds to the picture above. After asking the query, there are many possibilities for the stuck conveyor, but the program correctly guesses that it is at (3,3)(3, 3) and directs items to the right.

首页