Hoán Vị Thần Kì

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 10 Thời gian: 40.0s Bộ nhớ: 120M Input: bàn phím Output: màn hình

Cho một mảng A gồm N phần tử và 1 số K, các phần tử của mảng A được đánh số từ 1 đến N. Gọi một hoán vị của mảng A là mảng B. Hãy viết chương trình tìm xem liệu có hoán vị B nào thỏa mãn:

Các phần tử ở cùng một vị trí trong cả AB đều có chênh lệch bằng K.

Ví dụ:

  • Cho một mảng gồm 4 phần tử A = [1, 2, 3, 4], K = 2. Ta tìm được một hoán vị B = [3, 4, 1, 2] thỏa mãn điều kiện đề bài vì:
  • Ta có B[0] − A[0] = 3 − 1 = 2.
  • Tất cả các vị trí khác đều thỏa mãn tương tự.

Yêu cầu: Tìm ra hoán vị của mảng B

Dữ liệu: nhập dữ liệu gồm

  • Dòng đầu tiên : Số nguyên N (N ≤ 1001) là độ dài của mảng và 1 số K (0 ≤ K < N)

Kết quả:

  • Nếu có hoán vị B nào thỏa mãn đề bài, in ra hoán vị B đó, mỗi phần tử cách nhau 1 dấu cách.
  • Nếu không có hoán vị B nào thỏa mãn đề bài, in ra -1.

Ví dụ 1

ĐẦU VÀO

3 0

ĐẦU RA

1 2 3

Ví dụ 1

ĐẦU VÀO

16 8

ĐẦU RA

9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8

hint

Số phần tử có thể chia chỉ có thể là 2 * k tại vì 2 * k phải bé hơn hoặc bằng N, vì nếu lớn hơn thì ở phần từ sẽ tạo ra số âm, và phần cộng sẽ tạo ra số lớn hơn N, ví dụ: N = 4 và k = 3, thì [1, 2] sẽ cộng và [3, 4] sẽ trừ => [4, 5] và [0, 1]


Bình luận

Không có bình luận nào.