Tất cả thử thách
Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Hai Mã Không Tấn Công Nhau

Đếm số cách đặt an toàn hai quân mã cho mỗi kích thước bàn cờ vuông.

Với mỗi kích thước bàn cờ k từ 1 đến n, hãy đếm số cặp ô phân biệt không có thứ tự trên bàn cờ k x k mà hai quân mã không thể tấn công nhau. Một quân mã di chuyển hai ô theo một trục và một ô theo trục còn lại.

. x . x .
x . . . x
. . K . .
x . . . x
. x . x .

K đánh dấu vị trí quân mã và x là các ô mà quân mã có thể di chuyển tới, nếu các ô đó nằm trong bàn cờ. Đổi chỗ hai quân mã không tạo ra một cách đặt khác.

Cài đặt hàm two_knights(n).

Đầu vào

n: Kích thước bàn cờ lớn nhất cần xét.

Đầu ra

Trả về n số lượng theo thứ tự, ứng với các kích thước bàn cờ từ 1 đến n.

Ràng buộc

1 ≤ n ≤ 10.000. Kết quả đếm vừa với số nguyên có dấu 64-bit.

Ví dụ

Ví dụ 1
Đầu vào:
n = 3

Kết quả mong đợi:
expected = [0, 6, 28]
Đầu vào:
long long n = 3;

Kết quả mong đợi:
std::vector<long long> expected = {0, 6, 28};
Đầu vào:
long n = 3;

Kết quả mong đợi:
long[] expected = new long[] {0, 6, 28};

Giải thích

Bàn cờ 1 × 1 không thể đặt hai quân mã. Bàn cờ 2 × 2 có sáu cặp ô và không có trường hợp nào bị tấn công. Bàn cờ 3 × 3 có 36 cặp ô, trong đó tám cặp bị tấn công, còn lại 28 cặp an toàn.

Ví dụ 2
Đầu vào:
n = 1

Kết quả mong đợi:
expected = [0]
Đầu vào:
long long n = 1;

Kết quả mong đợi:
std::vector<long long> expected = {0};
Đầu vào:
long n = 1;

Kết quả mong đợi:
long[] expected = new long[] {0};

Giải thích

Cần hai ô phân biệt, nhưng bàn cờ chỉ có một ô.

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.