目录

CF1395B-Boboniu Plays Chess

CF1395B-Boboniu Plays Chess

题目:

题目描述:

Boboniu likes playing chess with his employees. As we know, no employee can beat the boss in the chess game, so Boboniu has never lost in any round.

You are a new applicant for his company. Boboniu will test you with the following chess question:

Consider a $ n\times m $ grid (rows are numbered from $ 1 $ to $ n $ , and columns are numbered from $ 1 $ to $ m $ ). You have a chess piece, and it stands at some cell $ (S_x,S_y) $ which is not on the border (i.e. $ 2 \le S_x \le n-1 $ and $ 2 \le S_y \le m-1 $ ).

From the cell $ (x,y) $ , you can move your chess piece to $ (x,y’) $ ( $ 1\le y’\le m, y’ \neq y $ ) or $ (x’,y) $ ( $ 1\le x’\le n, x’\neq x $ ). In other words, the chess piece moves as a rook. From the cell, you can move to any cell on the same row or column.

Your goal is to visit each cell exactly once. Can you find a solution?

Note that cells on the path between two adjacent cells in your route are not counted as visited, and it is not required to return to the starting point.

输入格式:

The only line of the input contains four integers $ n $ , $ m $ , $ S_x $ and $ S_y $ ( $ 3\le n,m\le 100 $ , $ 2 \le S_x \le n-1 $ , $ 2 \le S_y \le m-1 $ ) — the number of rows, the number of columns, and the initial position of your chess piece, respectively.

输出格式:

You should print $ n\cdot m $ lines.

The $ i $ -th line should contain two integers $ x_i $ and $ y_i $ ( $ 1 \leq x_i \leq n $ , $ 1 \leq y_i \leq m $ ), denoting the $ i $ -th cell that you visited. You should print exactly $ nm $ pairs $ (x_i, y_i) $ , they should cover all possible pairs $ (x_i, y_i) $ , such that $ 1 \leq x_i \leq n $ , $ 1 \leq y_i \leq m $ .

We can show that under these constraints there always exists a solution. If there are multiple answers, print any.

样例:

样例输入 1:

1
3 3 2 2

样例输出 1:

1
2
3
4
5
6
7
8
9
2 2
1 2
1 3
2 3
3 3
3 2
3 1
2 1
1 1

样例输入 2:

1
3 4 2 2

样例输出 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
2 2
2 1
2 3
2 4
1 4
3 4
3 3
3 2
3 1
1 1
1 2
1 3

思路:

实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, m, a, b;
    cin >> n >> m >> a >> b;
    for (int i = a; i >= 1; i--)
        cout << i << " " << b << endl;
    for (int i = a + 1; i <= n; i++)
        cout << i << " " << b << endl;
    // return 0;
    int kk = n;
    for (int i = b + 1; i <= m; i++)
    {
        if (kk == n)
        {
            for (int j = n; j >= 1; j--)
            {
                cout << j << " " << i << endl;
                // cout << j << endl;
            }
        }
        else
        {
            for (int j = 1; j <= n; j++)
            {
                cout << j << ' ' << i << endl;
                // cout << j << endl;
            }
        }
        if (kk == n)
            kk = 1;
        else
            kk = n;
    }
    for (int i = b - 1; i >= 1; i--)
    {
        if (kk == n)
        {
            for (int j = kk; j >= 1; j--)
            {
                cout << j << " " << i << endl;
            }
        }
        else
        {
            for (int j = 1; j <= n; j++)
            {
                cout << j << ' ' << i << endl;
            }
        }
        if (kk == n)
            kk = 1;
        else
            kk = n;
    }
}