#1037 · Bắt tay

MÔ TẢ BÀI TOÁN

Tiệc chia tay cuối năm. Nếu mỗi người tham dự bắt tay với tất cả những người còn lại đúng một lần. Có tổng cộng bao nhiêu cái bắt tay?

Ví dụ

\textit{n}\ = 3

3 người tham gia, p_1, p_2p_3. p_1 bắt tay với p_2p_3, và p_2 bắt tay với p_3. Vậy là tổng cộng có 3 cái bắt tay.

Mô tả hàm

Hoàn thành hàm handshakes bên dưới.

handshakes có những tham số sau:

  • int n: Số lượng người tham dự

Kiểu trả về

long: Tổng số lượng bắt tay.

Dữ liệu vào

  • Dòng đầu tiên chứa số lượng test case t.
  • Mỗi t dòng tiếp theo chứa một số nguyên, n.

Điều kiện:

  • 1 \le t \le 1000.
  • 0 \lt n \lt 10^6.

Dữ liệu ra

t dòng. Mỗi dòng bao gồm một số nguyên, tổng số lượng bắt tay.

BẢNG TỔNG QUAN KẾT QUẢ

# Tài khoản Kết suất Lúc nộp
1
A
1 ms 192 KB
248 Bytes
23/12/2022
12:32
2
T
Phạm Văn Trà @2280603325
1 ms 192 KB
262 Bytes
12/02/2023
01:43
3
1 ms 192 KB
446 Bytes
05/06/2023
14:26
4
H
Nguyễn Vũ Huy @2287700031
1 ms 196 KB
252 Bytes
09/02/2023
09:42
5
1 ms 196 KB
329 Bytes
12/09/2023
14:50
6
1 ms 196 KB
345 Bytes
30/11/2022
18:29
7
1 ms 196 KB
365 Bytes
18/07/2023
01:05
8
Đ
1 ms 200 KB
215 Bytes
30/05/2023
16:44
9
T
Trình Minh Trí @2180608752
1 ms 200 KB
307 Bytes
03/01/2023
19:21
10
A
1 ms 200 KB
390 Bytes
25/05/2023
12:02
11
1 ms 204 KB
279 Bytes
18/12/2022
21:59
12
1 ms 204 KB
298 Bytes
04/07/2023
15:12
13
1 ms 204 KB
463 Bytes
08/09/2023
22:26
14
1 ms 204 KB
498 Bytes
22/10/2023
23:39
15
K
1 ms 208 KB
571 Bytes
15/11/2023
02:16
16
T
Hoàng Anh Thư @2280615826
1 ms 216 KB
420 Bytes
14/10/2023
06:47
17
1 ms 216 KB
569 Bytes
03/10/2023
22:14
18
1 ms 220 KB
240 Bytes
26/12/2025
04:28
19
Q
1 ms 220 KB
268 Bytes
25/12/2025
17:45
20
1 ms 220 KB
353 Bytes
09/10/2025
22:36

LỊCH SỬ CÁ NHÂN

Vui lòng đăng nhập để xem lịch sử làm bài của bạn.

THẢO LUẬN BÀI TOÁN

4 tháng trước

Hướng dẫn

Ví dụ với n=5:

  • Người thứ nhất bắt tay với 4 người còn lại -> 4 cái bắt tay.
  • Người thứ hai bắt tay với 3 người còn lại (đã tính cái bắt tay với người thứ nhất) -> 3 cái bắt tay.
  • Người thứ ba bắt tay với 2 người còn lại (đã tính cái bắt tay với người thứ hai và thứ ba) -> 2 cái bắt tay.
  • Người thứ tư bắt tay với 1 người còn lại (đã tính cái bắt tay với người thứ hai, thứ ba và thứ tư) -> 1 cái bắt tay.
  • Người thứ năm đã bắt tay với 4 người còn lại (tính ở trên)

=> Vậy có tất cả: 4 + 3 + 2 + 1 = 10 cái bắt tay.

Từ kết quả trên ta thấy đó là một cấp số cộng, công thức tính cấp số cộng của kết quả trên là: s = n(n+1)/2

Ta để ý thấy n = 5 nhưng kết quả chính xác là cấp số cộng chỉ cộng đến 4, tức là cộng đến n-1.

Thay n-1 vào công thức s ta được kết quả S = n(n-1)/2

Vào thảo luận 0 Phản hồi
V
5 tháng trước

Hướng dẫn

Ta có p1 p2 p3 thì

p1 bắt tay p2

p1 bắt tay p3

p2 bắt tay p3

=> Các cặp thoả mãn là (p1, p2), (p1, p3), (p2, p3)

=> Tổng các cặp thoả mãn là 3 (TTM)

Tạo công thức tính nhanh thông qua ma trận TTM nhân TTM <=> 3 nhân 3

    p1 p2 p3
p1  X  T  T
p2  X  X  T
p3  X  X  X

Trong đó:
T là thoả mãn
X là không thoả mãn

Ta thấy rằng các cặp thoả mãn là nửa tam giác trên đường chéo chính.

Đầu tiên ta n*n để tính tổng ma trận này.

Ở dòng cuối p3 thì cả dòng toàn X thế nên loại bỏ đi n*(n-1)

Ma trận còn:

    p1 p2 p3
p1  X  T  T
p2  X  X  T

Nhận ra ngay tổng các cặp thoả mãn = không thoả mãn => Chia 2

=> (n*(n-1))/2 vậy đã xong bài toán bắt tay này nhé :vv

Tổng độ phức tạp o(1)

Vào thảo luận 0 Phản hồi
H
2 năm trước

code mẫu của mình (python 100% AC)

temp = int(input()) arr = [] for i in range(temp):

n = int(input())
arr.append(n)

for k in arr:

print(k*(k-1)//2)
Vào thảo luận 0 Phản hồi

GỢI Ý & HƯỚNG DẪN

  • Trường hợp 1: Chỉ có duy nhất 1 người tham gia, nên không có cái bắt tay nào.
  • Trường hợp 2 : Có 2 thành viên tham gia, nên sẽ có 1 cái bắt tay được thực hiện.
Viết code