Contest tổng hợp kiến thức - Khang
Ma trận xoắn ốc (6)
Nộp bàiPoint: 1
Mô tả: Cho số nguyên dương n (1≤n≤20), in ra ma trận kích thước n×n với các số từ 1 đến n^2 theo dạng xoắn ốc theo chiều kim đồng hồ.
Input: Một số nguyên n
Output: n dòng, mỗi dòng gồm n số cách nhau bởi khoảng trắng.
Ví dụ:
Input:
3
Output:
1 2 3
8 9 4
7 6 5
In bảng số đối xứng (6)
Nộp bàiPoint: 1
Cho số nguyên n, hãy in ra bảng n x n sao cho mỗi ô (i, j) chứa giá trị min(i, j, n - i + 1, n - j + 1)
Input: Số nguyên n (1 ≤ n ≤ 20)
Output: Ma trận đối xứng
Ví dụ:
Input:
4
Output:
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1
Bàn cờ caro (6)
Nộp bàiPoint: 1
Cho số nguyên dương n. Vẽ bàn cờ n x n với các ô xen kẽ # và . như caro, bắt đầu bằng # ở góc trên cùng bên trái.
Ràng buộc: Số nguyên n (1 ≤ n ≤ 100)
Input:
5
Output:
#.#.#
.#.#.
#.#.#
.#.#.
#.#.#
Xây dựng hàm tìm ước chung lớn nhất của ba số
Nộp bàiPoint: 1
Viết hàm gcd3(a, b, c) tính ước chung lớn nhất của ba số nguyên dương.
Input
Ba số nguyên dương a, b, c (1 ≤ a, b, c ≤ 10^9).
Output
In ra UCLN của ba số.
Ví dụ
Input 1
6 9 15
Output 1
3
Xây dựng hàm tìm bội chung nhỏ nhất của ba số
Nộp bàiPoint: 1
Viết hàm lcm3(a, b, c) tính BCNN của ba số nguyên dương.
Input
Ba số nguyên dương a, b, c (1 ≤ a, b, c ≤ 10^6).
Output
In ra BCNN của ba số.
Ví dụ
Input 1:
2 3 4
Output 1:
12
Xây dựng hàm đếm số nguyên tố trong đoạn [a, b]
Nộp bàiPoint: 1
Viết hàm countPrimes(a, b) trả về số lượng số nguyên tố trong đoạn [a, b].
Input
Hai số nguyên dương a, b (1 ≤ a ≤ b ≤ 10^6).
Output
In ra số lượng số nguyên tố trong đoạn.
Ví dụ
Input 1
2 10
Output 1
4
Xây dựng hàm kiểm tra số chính phương
Nộp bàiPoint: 1
Viết hàm isSquare(n) kiểm tra n có phải là số chính phương hay không.
Input
Một số nguyên dương n (1 ≤ n ≤ 10^9).
Output
In YES hoặc NO.
Ví dụ
Input 1
16
Output 1
YES
Xây dựng hàm kiểm tra số Strong
Nộp bàiPoint: 1
Một số được gọi là Strong nếu tổng giai thừa các chữ số của nó bằng chính nó.
Viết hàm isStrong(n) kiểm tra điều kiện này.
Input
Một số nguyên dương n (1 ≤ n ≤ 10^6).
Output
In YES hoặc NO.
Ví dụ
Input 1
145
Output 1
YES
Xây dựng hàm tính tổng dãy số nghịch đảo
Nộp bàiPoint: 1
Viết hàm sumSeries(n) tính:

---
Input
Một số nguyên dương n (1 ≤ n ≤ 10^5).
Output
In ra giá trị S, làm tròn đến 5 chữ số thập phân.
--
Ví dụ
Input 1
3
Output 1
1.83333
Xây dựng hàm tính a^b
Nộp bàiPoint: 1
Viết hàm long long power(int a, int b) để tính giá trị a^b (a mũ b).
Input: Hai số nguyên a, b (0 ≤ a ≤ 10, 0 ≤ b ≤ 10)
Output:
In ra giá trị a^b.
Ví dụ
Input 1:
2 5
Output 1:
32
Xây dựng hàm tính tổng các số nguyên tố nhỏ hơn n
Nộp bàiPoint: 1
Viết hàm int sumPrimes(int n) trả về tổng các số nguyên tố nhỏ hơn n.
Input: Một số nguyên dương n.
Output: In ra tổng các số nguyên tố nhỏ hơn n.
Ví dụ:
Input 1:
10
Output 1:
17
Số lớn hơn các số đứng trước (mảng 1 chiều nâng cao)
Nộp bàiPoint: 1
Cho một dãy số nguyên dương có n phần tử. Hãy liệt kê số các phần tử trong dãy lớn hơn tất cả các số đứng trước nó (Phần tử đầu tiên được coi là một phần tử thỏa mãn).
Định dạng đầu vào: Dòng đầu tiên là số lượng phần tử trong mảng. Dòng thứ 2 là N phần tử trong mảng.
Ràng buộc: 2≤n≤10^6; 1≤ai≤10^9
Định dạng đầu ra: Liệt kê các số thỏa mãn
Input:
6
6 2 1 3 9 9
Output:
6 9
Gửi thư
Nộp bàiPoint: 1
Tất cá các thành phố của Lineland đều năm trên trục tọa độ Ox. Do đó, mỗi thành phố được liên kết với vị trí xi - tọa độ trên trục Ox. Không có hai thành phố được đặt tại một điểm. Cư dân Lineland thích gửi thư cho nhau. Một người chỉ có thể gửi thư nếu người nhận sống ở một thành phố khác. Chi phí gửi thư chính xác bằng khoảng cách giữa thành phố của người gửi và thành phố của người nhận. Đối với mỗi thành phố, hãy tính hai giá trị mini và maxi, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i đến một thành phố khác và maxi là chi phí tối đa để gửi thư từ thành phố thứ i đến một số thành phố khác.
Định dạng đầu vào: Dòng đầu tiên là số nguyên dương n. Dòng thứ hai chứa chuỗi n số nguyên khác nhau x1, x2,.... xn (-10^9 <= xi <=10^9), trong đó xi là tọa độ x của thành phố thứ i. Tất cả các xi là khác biệt và theo thứ tự tăng dần.
Ràng buộc: 2 ≤ n ≤ 10^6; -10^9 ≤ xi ≤ 10^9
Input:
4
-5 -2 2 7
Output:
3 12
3 9
4 7
5 12
Đếm cặp số nguyên tố cùng nhau (mảng 1 chiều nâng cao)
Nộp bàiPoint: 1
Cho một dãy số nguyên dương có n phần tử. Hãy đếm các cặp số nguyên tố cùng nhau trong mảng
Định dạng đầu vào: Dòng đầu tiên là số lượng phần tử trong mảng n. Dòng thứ 2 là các phần tử ai trong mảng
Ràng buộc: 1≤n≤1000; 1≤ai≤10^9
Định dạng đầu ra: In ra số lượng cặp số nguyên tố cùng nhau trong mảng.
Input:
5
2 4 8 3 6
Output:
3
Dãy số ưu thế (mảng 1 chiều nâng cao)
Nộp bàiPoint: 1
Cho dãy A[] chỉ bao gồm các số nguyên dương nhưng không biết trước số phần tử của dãy. Người ta gọi dãy A[] là dãy ưu thế nếu thỏa mãn 1 trong 2 điều kiện sau đây: Dãy gọi là ưu thế chẵn nếu số phần tử của dãy là chẵn và số lượng số chẵn trong dãy nhiều hơn số lượng số lẻ. Dãy gọi là ưu thế lẻ nếu số phần tử của dãy là lẻ và số lượng số lẻ trong dãy nhiều hơn số lượng số chẵn.
Định dạng đầu vào: 1 dòng gồm các số nguyên, mỗi số cách nhau đúng một khoảng trắng, sau chữ số cuối cùng có thể có khoảng trắng.
Ràng buộc: Số lượng phần tử trong dãy không quá 10^5; 1 ≤ A[i] ≤ 10^9
Định dạng đầu ra: In ra YES nếu dãy là dãy ưu thể, ngược lại in NO.
Input:
2 2 3 5 8 10 20 88
Output:
YES
Số thao tác giúp mảng tăng dần 2
Nộp bàiPoint: 1
Cho dãy số A[] gồm có t phần tử. Ớ mỗi thao tác bạn có thể tăng các phần tử trong mảng lên 1 lượng là d đơn vị, hãy xác định số thao tác tối thiểu sao cho mảng trở thành một dãy tăng chặt. Ví dụ dãy 1 2 3 7 8 là một dãy tăng chặt, nhưng dãy 1 2 2 7 8 không phải là một dãy tăng chặt. Ví dụ với mảng ban đầu là 1 3 3 2 và d = 2, ta cần thực hiện thao tác thứ nhất thêm d vào phần tử thứ 3 trong mảng, mảng trở thành 1 3 5 2, ta tiếp thục thực hiện 2 thao tác thêm d vào phần tử thứ 4, mảng trở thành dãy tăng chặt là 1 3 5 6.
Định dạng đầu vào: Dòng đầu tiên là số nguyên N và số d. Dòng tiếp theo gồm N số nguyên A[i]
Ràng buộc: 1≤ N, d ≤ 10^4; 0 ≤ A[i] ≤ 10^6
Định dạng đầu ra: In ra số thao tác tối thiểu cần thực hiện để biến mảng thành dãy tăng chặt.
Input:
3 3
15 17 9
Output:
3
Chia mảng (sắp xếp)
Nộp bàiPoint: 1
Cho mảng A[] gồm N số nguyên không âm và số K. Nhiệm vụ của bạn là hãy chia mảng A[] thành hai mảng con có kích cỡ K và N-K sao cho hiệu giữa tổng hai mảng con là lớn nhất. Ví dụ với mảng A[] = {8, 4, 5, 2, 10}, K = 2 ta có kết quả là 17 vì mảng A[] được chia thành hai mảng (4, 2) và (8, 5,10) có hiệu của hai mảng con là 23-6=17 là lớn nhất.
Định dạng đầu vào: Dòng đầu tiên là 2 số N và K. Dòng thứ 2 là N số trong mảng A
Ràng buộc: 1 ≤ K < N ≤ 10^5; 0 ≤ A[i] ≤ 10^7
Định dạng đầu ra: In ra hiệu lớn nhất có thể.
Input:
8 3
1 1 1 1 1 1 1 1
Output:
2
Thành phố trên hệ trục tọa độ
Nộp bàiPoint: 1
Tất cả các thành phố của Lineland đều nằm trên trục tọa độ Ox. Do đó, mỗi thành phố được liên kết với vị trí xi - tọa độ trên trục Ox. Không có hai thành phố được đặt tại một điểm. Cư dân Lineland thích gửi thư cho nhau. Một người chỉ có thể gửi thư nếu người nhận sống ở một thành phố khác. Chi phí gửi thư chính xác bằng khoảng cách giữa thành phố của người gửi và thành phố của người nhận. Đối với mỗi thành phố, hãy tính hai giá trị mini và maxi, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i đến một thành phố khác và maxi là chi phí tối đa để gửi thư từ thành phố thứ i đến một số thành phố khác.
Input: Dòng đầu tiên của đầu vào chứa số nguyên n (2<= n ≤ 10^5) - số lượng thành phố trong Lineland. Dòng thứ hai chứa chuỗi n số nguyên khác nhau x1, x2, ..., xn (-10^9<= xi <=10^9), trong đó xi là tọa độ x của thành phố thứ i. Tất cả các xi là khác biệt và theo thứ tự tăng dần.
Output: In n dòng, dòng thứ i phải chứa hai số nguyên mini, maxi, cách nhau bởi một khoảng trắng, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i và maxi là chi phí tối đa để gửi thư từ thành phố thứ i.
Ví dụ:
Input:
4
-5 -2 2 7
Ouput:
3 12
3 9
4 7
5 12
Liệt kê các phần tử có ít nhất 2 phần tử lớn hơn nó
Nộp bàiPoint: 1
Cho một mảng gồm n (3<=n<=10^7) số nguyên đôi một khác nhau, liệt kê các phần tử trong mảng có ít nhất 2 phần tử khác lớn hơn nó.
Ví dụ:
Input
6
1 5 4 3 2 7
Output
1 4 3 2
Đếm các số nguyên tố trên đường chéo chính và phụ (mảng 2 chiều cơ bản)
Nộp bàiPoint: 1
Cho ma trận vuông cỡ NxN gồm N hàng, mỗi hàng N cột. Hãy đếm các số nguyên tố trên đường chéo chính và đường chéo phụ, mỗi giá trị là số nguyên tố thỏa mãn chỉ đếm 1 lần.
Định dạng đầu vào: Dòng đầu tiên là số N. N dòng tiếp theo mỗi dòng có N số.
Ràng buộc: 1 ≤ n ≤ 200; Các phần tử trong ma trận là số dương không quá 10^6;
Định dạng đầu ra: In ra số lượng số nguyên tổ trên đường chéo chính và phụ.
Input:
3
1 2 3
4 5 6
7 8 9
Output:
3
Liệt kê các số nguyên tố trong mảng 2 chiều (mảng 2 chiều cơ bản)
Nộp bàiPoint: 1
Cho ma trận cỡ NxM gồm N hàng, mỗi hàng M cột. Hãy liệt kê các số nguyên tố theo từng hàng trong ma trận.
Định dạng đầu vào: Dòng đầu tiên là 2 số N và M. N dòng tiếp theo mỗi dòng có M số.
Ràng buộc: 1 ≤ n,m ≤ 500; Các phần tử trong ma trận là số dương không quá 10^9.
In ra các số nguyên tố trong ma trận theo từng dòng
Input:
3 3
1 2 3
4 5 6
7 8 9
Output:
2 3
5
7
In các phần tử thuộc ma trận theo hình con rắn (mảng 2 chiều cơ bản)
Nộp bàiPoint: 1
Cho ma trận vuông A[n][n], hãy in các phần tử thuộc ma trận theo hình con rắn
Định dạng đầu vào: Dòng đầu tiên đưa vào n là cấp của ma trận vuông A, n dòng tiếp theo là các phần tử của ma trận
Ràng buộc: 1 <= n <= 100; 0 <= A[i][j] <= 10^7
Định dạng đầu ra: In ra ma trận theo yêu cầu
Input:
3
1 2 3
4 5 6
7 8 9
Output:
1 2 3
6 5 4
7 8 9
Biên của ma trận (mảng 2 chiều cơ bản)
Nộp bàiPoint: 1
Cho ma trận vuông A có N phần tử, hãy in ra các phần tử thuộc biên của ma trận
Đầu vào:
Dòng đầu tiên nhập N
N dòng tiếp theo nhập các phần tử của ma trận
Ràng buộc:
1 <= N <= 100; 0 <= A[i][j] <= 10^6
Đầu ra: In ra các phần tử thuộc biên của ma trận (chú ý in theo định dạng của Output)
Input:
4
1 2 3 4
5 6 7 8
9 8 7 6
6 5 4 3
Output:
1 2 3 4
5 8
9 6
6 5 4 3
Phần tử xuất hiện ở mọi hàng (mảng 2 chiều cơ bản)
Nộp bàiPoint: 1
Cho ma trận vuông A có N phần tử, hãy in ra các phần tử xuất hiện ở mọi hàng của ma trận
Đầu vào:
Dòng đầu tiên nhập N
N dòng tiếp theo nhập các phần tử của ma trận
Ràng buộc:
1 <= N <= 100; 0 <= A[i][j] <= 200
Đầu ra: In ra các phần tử xuất hiện ở mọi hàng của ma trận, nếu không có in ra NOT FOUND
Input:
4
1 2 2 3
2 1 2 4
1 4 5 2
2 2 3 1
Output:
1 2
Tổng các phần tử là số nguyên tố thuộc tam giác dưới
Nộp bàiPoint: 1
Nhập ma trận A là ma trận vuông cấp n. Tìm tổng các phần tử là số nguyên tố thuộc tam giác dưới (nếu không có phần tử nào in ra 0)
INPUT:
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
OUTPUT:
29
Đổi chỗ để sắp xếp tăng dần
Nộp bàiPoint: 1
Cho một dãy gồm n số nguyên dương a1, a2, a3,..., a_n là hoán vị của các số nguyên từ 1 đến n. Sử dụng các thao tác lần lượt đổi chỗ hai số ở vị trí i và j bất kỳ, hãy sắp xếp dãy ban đầu thành dãy tăng dần.
Input:
• Dòng đầu tiên chứa số nguyên dương n (n ≤ 10^5).
• Dòng tiếp theo chứa n số nguyên dương a1, a2, a3, ..., an là hoán vị của các số nguyên từ 1 đến n.
Output:
• Dòng đầu tiên in ra số k (0 ≤ k ≤ 2 x 10^5) - số lượng thao tác cần dùng.
• K dòng tiếp theo, mỗi dòng chứa hai số nguyên i, j cách nhau một khoảng trắng (1 ≤ i, j ≤ n) thể hiện một thao tác đối ai và aj cho nhau.
Có thể chứng minh được rằng luôn tồn tại cách sắp xếp thoa mãn không sử dụng quá 2 x 10^5 thao tác
Input:
4
3 4 1 2
Output:
2
1 3
2 4
Mốc thời gian (cmp)
Nộp bàiPoint: 1
Cho N mốc thời gian, mỗi mốc gồm Giờ, Phút, Giây. Hãy sắp xếp các mốc thời gian này theo thứ tự tăng dần.
Dữ liệu vào:
Dòng 1: N.
N dòng tiếp theo: Mỗi dòng gồm 3 số nguyên h, m, s.
Dữ liệu ra:
Danh sách thời gian đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
0 <= h < 24, 0 <= m, s < 60
Ví dụ:
Input:
2
12 30 15
12 30 10
Output:
12 30 10
12 30 15
Danh sách học sinh (cmp)
Nộp bàiPoint: 1
Mỗi học sinh có Tên (chuỗi, không dấu cách) và Điểm (số nguyên). Sắp xếp danh sách học sinh theo Điểm giảm dần. Nếu Điểm bằng nhau, sắp xếp theo Tên tăng dần (từ điển).
Dữ liệu vào:
Dòng 1: N.
N dòng tiếp theo: Mỗi dòng gồm Tên và Điểm.
Dữ liệu ra:
Danh sách đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
Ví dụ:
Input:
3
Nam 8
Tuan 9
Binh 8
Output:
Tuan 9
Binh 8
Nam 8
Phân số (cmp)
Nộp bàiPoint: 1
Cho N phân số, mỗi phân số gồm Tử số và Mẫu số. Hãy sắp xếp các phân số theo giá trị tăng dần. (Lưu ý: Không nên dùng phép chia số thực để tránh sai số, hãy dùng nhân chéo).
Dữ liệu vào:
Dòng 1: N.
N dòng tiếp theo: Mỗi dòng chứa 2 số nguyên a (tử) và b (mẫu).
Dữ liệu ra:
Danh sách phân số a/b đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
1 <= a, b <= 1000
Ví dụ:
Input:
2
1 2
1 3
Output:
1/3 1/2
Đếm nguyên âm (cmp)
Nộp bàiPoint: 1
Cho N chuỗi ký tự tiếng Anh (chỉ gồm chữ cái thường). Sắp xếp các chuỗi theo số lượng nguyên âm (u, e, o, a, i) tăng dần. Nếu số lượng nguyên âm bằng nhau, xếp theo thứ tự từ điển.
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N chuỗi.
Dữ liệu ra:
Các chuỗi đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
Ví dụ:
Input:
3
banana apple sky
Output:
sky apple banana
Giải thích: sky(0), apple(2), banana(3).
Tìm Bạn Tri Kỷ
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử. Hãy đếm xem có bao nhiêu cặp chỉ số (i, j) sao cho i < j và A[i] = A[j].
Dữ liệu vào:
Dòng đầu chứa số nguyên N.
Dòng thứ hai chứa N số nguyên A[i].
Dữ liệu ra:
Số lượng cặp phần tử bằng nhau.
Giới hạn:
1 <= N <= 10^5
|A[i]| <= 10^9
Ví dụ 1:
Input:
5
2 1 2 2 3
Output:
3
(Giải thích: Các cặp giá trị 2 là (vị trí 0, 2), (0, 3), (2, 3))
Ví dụ 2:
Input:
3
1 2 3
Output:
0
Danh Sách Thất Lạc
Nộp bàiPoint: 1
Một danh sách đầy đủ phải chứa các số từ 1 đến N. Tuy nhiên người ta nhập thiếu mất 1 số, nên dãy chỉ còn N-1 số. Hãy tìm số bị thiếu đó.
Dữ liệu vào:
Dòng đầu chứa số nguyên N (dãy hiện tại có N-1 số).
Dòng thứ hai chứa N-1 số nguyên, các số đều khác nhau và nằm trong khoảng [1, N].
Dữ liệu ra:
Số bị thiếu.
Giới hạn:
2 <= N <= 10^5
Ví dụ 1:
Input:
5
1 2 4 5
Output:
3
Ví dụ 2:
Input:
4
4 1 3
Output:
2
Cặp số có tổng nhỏ hơn K
Nộp bàiPoint: 1
Cho mảng a gồm n phăn tử và số nguyên dương k. Đếm số lượng cặp số ai, aj (i != j) có tổng nhỏ hơn k.
Định dạng đầu vào: Dòng thứ 1 là số lượng phần tử trong mảng và số nguyên dương k; Dòng thứ 2 là n phần tử trong mảng
Ràng buộc: 2<=п<=10^6; 1<=k<=10^6; 0<=a(i)<=10^6;
Định dạng đầu ra: In ra số lượng cặp số có tổng bằng k
Input:
4 5
2 2 2 2
Output:
6
Khoảng cách xa nhất
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử và một số nguyên X. Hãy tìm khoảng cách lớn nhất giữa chỉ số đầu tiên và chỉ số cuối cùng mà X xuất hiện. Nếu X xuất hiện ít hơn 2 lần hoặc không xuất hiện, in ra 0.
Dữ liệu vào:
Dòng 1: Số nguyên N và X.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra:
Khoảng cách lớn nhất (LastIndex - FirstIndex).
Ràng buộc: 1 <= N <= 10^6; |Ai|, |X| <= 10^9.
Ví dụ 1:
Input:
6 5
5 1 2 5 3 5
Output:
5
Ví dụ 2:
Input:
4 10
1 2 3 4
Output:
0
Cực đại địa phương
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử. Một phần tử được gọi là cực đại địa phương nếu nó lớn hơn cả phần tử đứng liền trước và liền sau nó (nếu có). Hãy đếm số lượng cực đại địa phương trong dãy.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra: Số lượng cực đại địa phương.
Ràng buộc: 1 <= N <= 10^6; |Ai| <= 10^9.
Ví dụ 1:
Input:
5
1 5 2 4 3
Output:
2
Ví dụ 2:
Input:
3
1 1 1
Output:
0
Ký tự xuất hiện đầu tiên
Nộp bàiPoint: 1
Cho một chuỗi ký tự S và một ký tự C. Hãy tìm vị trí đầu tiên (tính từ 0) của C trong S.
Dữ liệu vào:
Dòng 1: Chuỗi S (không chứa dấu cách).
Dòng 2: Ký tự C.
Dữ liệu ra: Chỉ số đầu tiên của C hoặc -1.
Ràng buộc: Độ dài S <= 10^6.
Ví dụ 1:
Input:
programming
r
Output:
1
Ví dụ 2:
Input:
hello
z
Output:
-1
Điểm bất động
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử được đánh số từ 0 đến N-1. Hãy tìm chỉ số i đầu tiên sao cho A[i] == i. Nếu không có, in -1.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A0, A1, ..., AN-1.
Dữ liệu ra: Chỉ số i tìm được hoặc -1.
Ràng buộc: 1 <= N <= 10^6; |Ai| <= 10^9.
Mảng không nhất thiết phải sắp xếp.
Ví dụ 1:
Input:
5
-1 0 2 5 10
Output:
2
Ví dụ 2:
Input:
3
1 2 3
Output:
-1
Dây chuyền sản xuất (Maximum Length of Pair Chain)
Nộp bàiPoint: 1
Một nhà máy có N công đoạn sản xuất. Mỗi công đoạn được định nghĩa bằng một cặp (A, B) nghĩa là bắt đầu tại A và kết thúc tại B (A < B). Để tạo thành một dây chuyền, công đoạn tiếp theo (C, D) phải có thời điểm bắt đầu C lớn hơn thời điểm kết thúc B của công đoạn trước đó (C > B). Em có quyền chọn ra các công đoạn và ghép chúng lại với nhau. Hỏi dây chuyền dài nhất tạo được chứa bao nhiêu công đoạn?
Dữ liệu vào:
Dòng 1: Số N (1 <= N <= 10^5).
N dòng tiếp theo: Mỗi dòng 2 số Ai và Bi (-10^9 <= Ai < Bi <= 10^9).
Kết quả ra: Chiều dài tối đa của dây chuyền.
Ví dụ:
Input:
3
1 2
2 3
3 4
Output:
2
(Chọn [1, 2] và [3, 4]).
Diện tích hình chữ nhật (cmp)
Nộp bàiPoint: 1
Cho N hình chữ nhật, mỗi hình được mô tả bởi Chiều dài và Chiều rộng. Hãy sắp xếp các hình chữ nhật theo Diện tích tăng dần. Nếu diện tích bằng nhau, hình nào có Chu vi nhỏ hơn đứng trước.
Dữ liệu vào:
Dòng 1: N.
N dòng tiếp theo: Mỗi dòng gồm 2 số nguyên dài, rộng.
Dữ liệu ra:
Danh sách các hình (in ra dài rộng) sau khi sắp xếp.
Ràng buộc:
1 <= N <= 1000
1 <= dài, rộng <= 1000
Ví dụ:
Input:
3
5 2
10 1
3 3
Output:
3 3 5 2 10 1
Giải thích:
(3,3): S=9
(5,2): S=10, P=14
(10,1): S=10, P=22
Máy tính phân số
Nộp bàiPoint: 1
Mô tả: Xây dựng cấu trúc PhanSo gồm tử số và mẫu số. Hãy thực hiện các phép tính cộng, trừ, nhân, chia cho 2 phân số và in kết quả dưới dạng tối giản. Đặc biệt, chương trình phải xử lý được dấu âm (ví dụ mẫu số âm phải chuyển dấu lên tử) và rút gọn phân số sau mỗi phép tính.
Yêu cầu kỹ thuật:
Nạp chồng toán tử nhập >> và xuất << .
Nạp chồng các toán tử + , - , * , /.
Tự động rút gọn phân số khi khởi tạo hoặc sau khi tính toán.
Dữ liệu vào:
• Dòng duy nhất chứa 4 số nguyên a, b, c, d lần lượt là tử và mẫu của phân số thứ nhất, tử và mẫu của phân số thứ hai (b, d ‡ 0).
Giá trị: -10^9 <= a, b, c, d <= 10^9
Dữ liệu ra:
• 4 dòng lần lượt là kết quả của: Tổng, Hiệu, Tích, Thương.
Ví dụ:
Input:
1 2 3 4
Output:
5/4
-1/4
3/8
2/3
Nhập xuất tài khoản ngân hàng (nạp chồng cin, cout)
Nộp bàiPoint: 1
Xây dựng struct TaiKhoan gồm Số tài khoản (chuỗi) và Số dư (số nguyên long long).
Nạp chồng toán tử >> để nhập Số tài khoản và Số dư.
Nạp chồng toán tử << để in ra thông báo số dư theo định dạng: "Tai khoan: [SoTK] | So du: [SoDu] VND".
Đầu vào:
Dòng 1: Số tài khoản (không chứa khoảng trắng).
Dòng 2: Số dư.
Đầu ra:
Chuỗi thông báo định dạng.
Ràng buộc:
Số dư >= 0.
Ví dụ:
Input:
0123456789
5000000
Output:
Tai khoan: 0123456789 | So du: 5000000 VND
Nhập xuất hỗn số (nạp chồng cin, cout)
Nộp bàiPoint: 1
Xây dựng struct HonSo gồm phần nguyên, tử số, mẫu số.
Nạp chồng toán tử >> để nhập 3 thành phần theo thứ tự: nguyên, tử, mẫu.
Nạp chồng toán tử << để in ra hỗn số theo định dạng: phannguyen(tuso/mau_so).
Đầu vào:
Một dòng chứa 3 số nguyên dương: phần nguyên, tử số, mẫu số.
Đầu ra:
Biểu diễn hỗn số.
Ràng buộc:
Mẫu số khác 0. Các giá trị trong khoảng int.
Ví dụ:
Input:
3 1 2
Output:
3(1/2)
Nhập xuất đơn thức (nạp chồng cin, cout)
Nộp bàiPoint: 1
Xây dựng struct DonThuc gồm hệ số (số thực) và số mũ (số nguyên).
Nạp chồng toán tử >> để nhập hệ số và số mũ.
Nạp chồng toán tử << để in ra đơn thức theo định dạng: heSo*x^soMu.
Lưu ý: In ra các hệ số của đơn thức luôn lấy 1 chữ số sau phần thập phân
Đầu vào:
Một dòng chứa hệ số và số mũ.
Đầu ra:
Chuỗi biểu diễn đơn thức.
Ràng buộc:
Số mũ >= 0.
Ví dụ:
Input:
5.5 2
Output:
5.5*x^2
So sánh ngày tháng (operator==)
Nộp bàiPoint: 1
Xây dựng struct Ngay gồm ngay, thang, nam. Nạp chồng toán tử == để kiểm tra xem 2 ngày có trùng nhau không.
Đầu vào:
Dòng 1: ngày tháng năm (ngày 1).
Dòng 2: ngày tháng năm (ngày 2).
Đầu ra:
In ra "TRUNG NHAU" hoặc "KHAC NHAU".
Ràng buộc:
Ngày tháng năm hợp lệ.
Ví dụ:
Input:
20 11 2023
20 11 2023
Output:
TRUNG NHAU
Tìm số xuất hiện đúng k lần (unordered_set)
Nộp bàiPoint: 1
Cho dãy gồm n số.
In ra tất cả các số xuất hiện đúng k lần, theo thứ tự tăng dần.
Input:
n k
a1 a2 ... an
Output:
Danh sách các số xuất hiện đúng k lần (tăng dần), hoặc in "NONE" nếu không có.
Constraints:
1 ≤ n ≤ 2×10^5
1 ≤ ai ≤ 10^9
1 ≤ k ≤ n
Sample:
Input:
6 2
1 2 2 3 3 3
Output:
2
Tìm phần tử có tần suất cao nhất (unordered_set)
Nộp bàiPoint: 1
Cho dãy n số nguyên, hãy in ra phần tử có tần suất xuất hiện lớn nhất.
Nếu có nhiều phần tử cùng tần suất, in ra phần tử nhỏ nhất trong số đó.
Input:
n
a1 a2 ... an
Output: Một số nguyên duy nhất — phần tử có tần suất cao nhất.
Constraints:
1 ≤ n ≤ 2×10^5
1 ≤ ai ≤ 10^9
Sample:
Input:
6
1 3 2 3 1 3
Output:
3
Ghép cặp tối ưu (multiset)
Nộp bàiPoint: 1
Có hai mảng A và B gồm n các số nguyên (1 <= n <= 10^4; -10^6 <= A[i], B[i] <= 10^6).
Hãy ghép từng phần tử A[i] với B[j] sao cho hiệu |A[i] - B[j]| nhỏ nhất.
In ra tổng hiệu tối thiểu.
Input:
3
1 4 6
2 7 5
Output:
3
Quản lý tòa nhà (multiset)
Nộp bàiPoint: 1
Bạn có n tầng của một tòa nhà (đánh số từ 1 đến n), ban đầu tất cả đều trống. Có m khách hàng, khách hàng thứ i muốn thuê tầng cao nhất có số tầng ≤ xi. Nếu không còn tầng nào thỏa mãn (tầng > xi hoặc đã cho thuê hết), in ra -1. Nếu tìm được, in số tầng đó và đánh dấu là đã cho thuê (không dùng lại nữa).
Input:
Dòng đầu: hai số nguyên n, m — số tầng và số yêu cầu thuê.
Dòng 2: n số nguyên — số tầng có sẵn (có thể là số tầng không liên tiếp).
Dòng 3: m số nguyên x1, x2, ..., x_m — yêu cầu của từng khách.
Output: In m số nguyên — kết quả thuê tầng tương ứng với mỗi yêu cầu.
Input:
3 5
2 3 4
3 4 2 2 1
Output:
3 4 2 -1 -1
Điểm chung
Nộp bàiPoint: 1
Trên trục số Ox, cho N đoạn thẳng, mỗi đoạn thẳng được xác định bởi hai điểm đầu và cuối là hai số nguyên. Một điểm M được gọi là nằm trong đoạn thẳng AB nếu A ≤ M ≤ B.
Yêu cầu: Đếm xem có bao nhiêu điếm có toạ độ nguyên nằm trong đúng K đoạn thắng.
Dữ liệu nhập vào:
• Dòng đầu tiên gồm hai số nguyên N và K (1 ≤ K ≤ N ≤ 10^5);
• N dòng sau, mỗi dòng gồm hai số nguyên a, b mô tả hai điểm đầu và cuối của đoạn thẳng (1 ≤ a ≤ b ≤ 10^18).
Kết quả in ra: Một số nguyên duy nhất là số lượng điểm có toạ độ nguyên nằm trong đúng K đoạn thẳng.
Ràng buộc:
• Có 50% số test ứng với 50% số điểm của bài thoa mãn: a, b ≤ 10^3;
• 30% số test khác ứng với 30% số điểm của bài thoả mãn: K = N;
• 20% số test còn lại ứng với 20% số điểm của bài không có ràng buộc gì thêm.
Ví dụ:
Input 01:
3 2
1 5
2 8
3 7
Output 01:
3
Giải thích: Toạ độ của 3 điểm nằm trong đúng 2 đoạn thẳng là: 2, 6, 7.
• Điểm có toạ độ 2 nằm trong 2 đoạn thẳng: đầu tiên và thứ hai.
• Điểm có toạ độ 6, 7 nằm trong 2 đoạn thẳng: thứ hai và thứ ba.
Input 02:
3 1
1 5
2 8
3 7
Output 02:
2
Giải thích: Tọạ độ của 2 điểm nằm trong đúng 1 đoạn thẳng là: 1, 8.
• Điểm có toạ độ 1 chỉ nằm trong đoạn thẳng đầu tiên.
• Điểm có tọạ độ 8 chỉ nằm trong đoạn thẳng thứ ba.
Phần thưởng 3 (unordered_map)
Nộp bàiPoint: 1
Cho bàn cờ kích thước N x N gồm N hàng ngang được đánh số từ 1 đến N từ dưới lên trên và N cột dọc được đánh số từ 1 đến N từ trái qua phải (Hình 1). Ô nằm trên giao của hàng i và cột j của bàn cờ ký hiệu là ô (i, j). Quân Mã có khả năng khống chế tất cả các ô ở đỉnh đối diện trên đường chéo của hình chữ nhật kích thước 2 X 3 (Hình 2). Trên K ô của bàn cờ có ghi các giá trị thưởng, các ô này ta sẽ gọi là ô thưởng. Ô thưởng thứ i ghi số nguyên dương Ci (i = 1,2,.,K).

Yêu cầu: Tìm một vị trí ô không có thưởng trên bàn cờ để đặt quân Mã sao cho tổng các giá trị các ô thưởng bị quân Mã này khống chế là lớn nhất.
Dữ liệu: Vào từ thiết bị vào chuẩn có cấu trúc như sau:
• Dòng đầu tiên chứa hai số nguyên dương N và K (N ≤ 10^9, K < min(N^2, 10^6));
• Dòng thứ i (i = 1,2,..., K) trong số K dòng tiếp theo ghi ba số nguyên dương ui vi, C; cho biết ô (ui, vi) là ô có thưởng với giá trị là Ci (Ci ≤ 10^9).
Kết quả: Ghi ra thiết bị ra chuẩn gồm một dòng chứa một số nguyên là tổng các giá trị các ô thưởng bị quân Mã khống chế là lớn nhất.
Ví dụ:
Input:
5 4
5 1 3
4 4 5
2 5 1
1 4 6
Output:
8
Giải thích:

Ràng buộc:
• Có 60% số test tương ứng với 60% số điểm có N ≤ 10^3;
• 40% số test còn lại tương ứng với 40% số điểm không có ràng buộc gì thêm.
Từ điển nghịch đảo (unordered_map)
Nộp bàiPoint: 1
Cho n dòng, mỗi dòng gồm một từ và nghĩa.
Sau đó cho q truy vấn, mỗi truy vấn là một nghĩa, hãy in ra tất cả các từ tương ứng với nghĩa đó (theo thứ tự xuất hiện ban đầu).
Nếu không có, in "NONE".
Input:
n q
word1 meaning1
word2 meaning2
...
meaning_query1
meaning_query2
...
Output: Cho mỗi truy vấn, in các từ trên một dòng, cách nhau bởi dấu cách, hoặc "NONE" nếu không có.
Constraints:
1 ≤ n, q ≤ 10^4
Mỗi từ / nghĩa có độ dài ≤ 20, chỉ chứa ký tự a-z.
Sample:
Input:
4 3
happy vui
joy vui
sad buon
tired met
vui
met
none
Output:
happy joy
tired
NONE
Đếm số cặp có tổng bằng nhau (uom)
Nộp bàiPoint: 1
Cho mảng A gồm n phần tử.
Đếm số cặp (i, j, k, l) sao cho ai + aj = ak + al với i < j và k < l, (i, j) khác (k, l).
Input:
n
a1 a2 ... an
Output: Một số nguyên — số cặp thỏa mãn.
Constraints:
1 ≤ n ≤ 2000
1 ≤ ai ≤ 10^4
Sample:
Input:
4
1 2 3 4
Output:
2