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 ...
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
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 | #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; } |