P142PROC spoj PTIT – Tập chơi cờ vua

Nguồn đề bài: http://www.spoj.com/PTIT/problems/P142PROC/

1. Đề bài P142PROC spoj

Tèo đang học cách chơi cờ với một bàn cờ kích thước 8×8. Cậu ấy đang học cách đi của quân xe, tượng và vua.
+ Quân tượng đi theo đường chéo, tùy ý số lượng ô.
+ Quân xe thì đi theo chiều dọc hoặc ngang, cũng tùy ý số lượng ô.
+ Quân vua thì đ itheo được 8 hướng nhưng mỗi lần chỉ đi được 1 ô.
Và tất cả quân này khi gặp vật cản hay cạnh bàn cờ thì đều không đi được tiếp.
Tèo đang thắc mắc, với mỗi quân cờ tượng, xe, vua thì sẽ mất ít nhất bao nhiều bước để di chuyển giữa 2 ô cho trước.

Input

Gồm một dòng duy nhất gồm 4 số nguyên là tọa độ của 2 ô cờ r1,c1, r2, c2 (1<=r1,c1,r2,c2<=8).

Output

Gồm 3 số nguyên lần lượt là số bước đi ít nhất của quân xe, tượng, vua. Trường hợp nào không đi được thì in ra số 0.

Example

Test 1:

Input:

4 3 1 6

Output:

2 1 3

 

Test 2:

Input:

5 5 5 6

Output:

1 0 1

2. Gợi ý P142PROC spoj PTIT

– Dựa vào công thức đường chéo chính, đường chéo phụ và áp dụng công thức tính khoảng các 2 tọa độ,… ta có thể dễ dàng tính được bài này

3. Code tham khảo P142PROC spoj PTIT

#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>

using namespace std;
int a , b , c , d ;
int xe() {
    if( a ==c || b==d )
        return 1  ;

    return 2 ;
}
int tuong() {
   if ( a - b == c - d )
        return 1;

    if(a + b == c+ d)
      return 1 ;


    if ( (a+b) % 2 == (c+d) %2 )
        return 2 ;

    return 0 ;

}

int vua() {
  return max(  abs(a-c) , abs(b -d) ) ;

}

int main()
{
    cin>>a>>b>>c>>d ;
    cout<<xe()<<" " <<tuong() <<" " << vua() <<endl ;
    return 0;
}

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *