Quân Tốt cờ tướng


Submit solution

Points: 2
Time limit: 1.0s
Memory limit: 98M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Cho bàn cờ tướng với một dòng sông như hình vẽ. Khác với cờ Vua, trong cờ Tướng, các quân cờ không được đặt ở giữa các ô vuông mà được đặt ở giữa các đường kẻ ngang và dọc.

Bàn cờ tướng

Trong cờ tướng, quân Tốt là quân di chuyển từng ô một tiến về phía trước, không đi lùi. Sau khi sang sông, quân Tốt có thể đi sang trái một ô, sang phải một ô hoặc tiến về trước một ô. Ban đầu, có 5 vị trí đặt quân Tốt là A, B, C, D, E như hình vẽ.

Yêu cầu: Giả sử có một quân địch đang ở vị trí (\(x\), \(y\)), hàng \(x\) cột \(y\). Hỏi quân tốt nào có thể đi tiêu diệt quân địch nhanh nhất (số bước di chuyển đến vị trí quân địch ít nhất).

Input

Một dòng duy nhất là hai số nguyên \(x\), \(y\) (hàng \(x\), cột \(y\)). Mỗi số cách nhau một khoảng trắng (0 \(<=\) \(x\) \(<=\) 9 và 0 \(<=\) \(y\) \(<=\) 8). Dữ liệu cho đảm bảo quân địch không nằm ở vị trí của 5 quân tốt.

Output

Nếu có quân Tốt tiêu diệt được quân địch, in ra 2 dòng:

Dòng đầu là số bước đi ngắn nhất đến vị trí quân địch của quân Tốt đó

Dòng thứ hai là tên của quân Tốt (5 quân tốt lần lượt có tên là A, B, C, D, E). Nếu có hai quân Tốt có số bước đi ngắn nhất bằng nhau thì in tên quân tốt mà xuất hiện trước trong bảng chữ cái

Nếu không có quân Tốt nào đến được vị trí quân địch:

In một dòng duy nhất giá trị -1

Ví dụ

Input 1

7 1

Output 1

5
A

Input 2

9 8

Output 2

6
E

Input 3

1 1

Output 3

-1

Giải thích

Ví dụ 1: Quân Tốt A, B đều mất ít nhất 5 bước đi để đến vị trị hàng 7 cột 1. Ta sẽ in ra tên của quân tốt đứng trước trong bảng chữ cái - quân Tốt A

Ví dụ 2: Chỉ có duy nhất quân Tốt E đi được đến vị trị hàng 9 cột 8 với số bước ngắn nhất là 6

Ví dụ 3: Không có quân Tốt nào đi được đến vị trí hàng 1 cột 1 nên đáp án là -1


Comments


  • 4
    TICHPX  commented on Oct. 25, 2022, 3:09 a.m.

    Code tham khảo C

    int main()
    {
        int x,y;
        char abc[]="ABCDE";
        scanf("%d%d",&y,&x);
        if(y<3 || (y<=4 && x%2!=0)) return !printf("-1");
        printf("%d\n%c",y-3+x%2,abc[x/2]);
    }

  • 6
    ZeroCoder  commented on Oct. 23, 2022, 3:34 p.m. edited

    Bài này thực chất là if else cái là ra nhưng đợt thi đầu óc mình không tỉnh táo làm bằng BFS :3 . Mình cũng thấy BFS bài này khá là dài nhưng mà cũng hay hay . Nên ae muốn luyện BFS hay cần cách khác có thể xem qua cách BFS của mình nhá . hehe . Nhìn hay phết Code C++ : https://ideone.com/p3wTyZ


    • 3
      DuyAnhhh  commented on Oct. 24, 2022, 1:27 a.m.

      Đúng lun, bài này ngồi nghĩ if else tí cũng ra, nhưng mà làm BFS thấy vẫn hay :3 :3


      • 1
        ZeroCoder  commented on Oct. 24, 2022, 4:01 a.m.

        Bài này anh sinh test bằng BFS đúng khum :3333


        • 1
          DuyAnhhh  commented on Oct. 24, 2022, 4:07 a.m.

          Chính xác :v :v