Sắp xếp 3 - Hưng
Sắp Xếp Ngược (cmp)
Nộp bàiPoint: 1
Cho một dãy số nguyên A gồm N phần tử. Hãy sắp xếp dãy số này theo thứ tự giảm dần (từ lớn đến bé).
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
In ra dãy số sau khi đã sắp xếp, các số cách nhau một dấu cách.
Ràng buộc:
1 <= N <= 10^5
|A[i]| <= 10^9
Ví dụ:
Input:
5
1 5 3 2 4
Output:
5 4 3 2 1
Sắp Xếp Theo Số Dư (cmp)
Nộp bàiPoint: 1
Cho dãy số nguyên dương A. Hãy sắp xếp dãy số sao cho số dư của chúng khi chia cho 3 tăng dần. Nếu hai số có cùng số dư khi chia cho 3, số nào nhỏ hơn sẽ đứng trước.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
Dãy số sau khi sắp xếp.
Ràng buộc:
1 <= N <= 10^5
1 <= A[i] <= 10^9
Ví dụ:
Input:
5
10 2 5 6 1
Output:
6 1 10 2 5
Tổng Chữ Số Tăng Dần (cmp)
Nộp bàiPoint: 1
Cho dãy số nguyên dương A. Hãy sắp xếp dãy số này sao cho tổng các chữ số của từng số tăng dần. Nếu tổng các chữ số bằng nhau, số nào có giá trị gốc nhỏ hơn sẽ đứng trước.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
Dãy số sau khi sắp xếp.
Ràng buộc:
1 <= N <= 1000
1 <= A[i] <= 10^9
Ví dụ:
<h7>Input:</h7>4
12 30 100 23
Output:
100 12 30 23
Chữ số tận cùng (cmp)
Nộp bàiPoint: 1
Hãy sắp xếp dãy số theo thứ tự tăng dần của chữ số tận cùng. Nếu chữ số tận cùng bằng nhau, số lớn hơn đứng trước.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 10^5
0 <= A[i] <= 10^9
Ví dụ:
Input:
5
15 32 104 22 9
Output:
32 22 104 15 9
Sắp xếp theo tổng các chữ số (cmp)
Nộp bàiPoint: 1
Sắp xếp dãy số theo thứ tự tăng dần của tổng các chữ số. Nếu tổng các chữ số bằng nhau, số nào có giá trị nhỏ hơn sẽ đứng trước.
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N số nguyên dương A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 10^5
1 <= A[i] <= 10^9
Ví dụ:
Input:
4
12 30 100 23
Output:
100 12 30 23
Giải thích: Tổng chữ số lần lượt là 1, 3, 3, 5. Số 12 và 30 có cùng tổng là 3 nhưng 12 < 30.
Sắp xếp theo tổng số lượng các ước số (cmp)
Nộp bàiPoint: 1
Mô tả: Sắp xếp dãy số theo số lượng ước số của chúng giảm dần. Nếu hai số có cùng số lượng ước, số lớn hơn đứng trước.
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N số nguyên dương A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
1 <= A[i] <= 10000
Ví dụ:
Input:
3
4 6 7
Output:
6 4 7
Giải thích: 6 có 4 ước, 4 có 3 ước, 7 có 2 ước.
Số nguyên tố đầu tiên (cmp)
Nộp bàiPoint: 1
Cho dãy số A. Hãy đưa các số nguyên tố ra đầu dãy (tăng dần), các số không phải nguyên tố về cuối dãy (tăng dần).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N số nguyên dương A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
1 <= A[i] <= 10^6
Ví dụ:
Input:
5
4 3 7 10 2
Output:
2 3 7 4 10
Dãy số âm dương (cmp)
Nộp bàiPoint: 1
Mô tả: Sắp xếp dãy số sao cho: Số âm đứng trước (giảm dần về giá trị), số 0 ở giữa, số dương đứng cuối (giảm dần về giá trị).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 10^5
|A[i]| <= 10^9
Ví dụ:
Input:
6
2 -5 0 4 -1 0
Output:
-1 -5 0 0 4 2
Ưu tiên chính phương (cmp)
Nộp bàiPoint: 1
Mô tả: Sắp xếp dãy số sao cho các số chính phương đứng trước (tăng dần), các số còn lại đứng sau (tăng dần).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N số nguyên dương A[i].
Dữ liệu ra:
Dãy số đã sắp xếp.
Ràng buộc:
1 <= N <= 10^5
1 <= A[i] <= 10^9
Ví dụ:
Input:
5
5 4 9 2 1
Output:
1 4 9 2 5
Độ dài chuỗi (cmp)
Nộp bàiPoint: 1
Cho danh sách N từ. Hãy sắp xếp các từ theo độ dài tăng dần. Nếu hai từ có cùng độ dài, giữ nguyên thứ tự xuất hiện ban đầu (hoặc sắp xếp theo từ điển nếu muốn luyện thêm, ở bài này ta chọn sắp xếp theo từ điển).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N từ, mỗi từ cách nhau bởi dấu cách.
Dữ liệu ra:
Các từ đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
Độ dài mỗi từ <= 100
Ví dụ:
Input:
4
code c++ is fun
Output:
is c++ fun code
Từ điển ngược (cmp)
Nộp bàiPoint: 1
Sắp xếp danh sách các chuỗi ký tự theo thứ tự từ điển giảm dần (Z -> A).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N chuỗi ký tự.
Dữ liệu ra:
Các chuỗi đã sắp xếp.
Ràng buộc:
1 <= N <= 1000
Ví dụ:
Input:
3
Lan Hoa Mai
Output:
Mai Lan Hoa
Ghép số lớn nhất (cmp)
Nộp bàiPoint: 1
Cho N chuỗi số. Hãy sắp xếp các chuỗi này sao cho khi ghép chúng lại liên tiếp nhau, ta được một số tự nhiên có giá trị lớn nhất. (Ví dụ: "9" và "92", ghép "9"+"92"="992" lớn hơn "92"+"9"="929" nên "9" đứng trước).
Dữ liệu vào:
Dòng 1: N.
Dòng 2: N chuỗi số.
Dữ liệu ra:
In ra số lớn nhất tạo được (ghép các chuỗi sau khi sort).
Ràng buộc:
1 <= N <= 100
Độ dài chuỗi <= 100
Ví dụ:
Input:
2
9 92
Output:
992
Đế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).
Điểm tọa độ (cmp)
Nộp bàiPoint: 1
Trong mặt phẳng tọa độ Oxy, cho N điểm. Hãy sắp xếp các điểm theo khoảng cách từ điểm đó đến gốc tọa độ O(0,0) tăng dần. Nếu khoảng cách bằng nhau, điểm nào có hoành độ (x) 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 chứa 2 số nguyên x, y.
Dữ liệu ra:
Danh sách các điểm (x y) sau khi sắp xếp.
Ràng buộc:
1 <= N <= 10^4
|x|, |y| <= 1000
Ví dụ:
Input:
3
1 1
0 2
3 0
Output:
1 1 0 2 3 0
Giải thích: d(1,1)=căn(2), d(0,2)=2, d(3,0)=3.
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
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
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
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
Sắp xếp các xâu theo độ dài
Nộp bàiPoint: 1
Cho một danh sách gồm N xâu ký tự, hãy sắp xếp lại các xâu đó theo thứ tự xâu nào dài hơn sắp xếp lên trước, nếu các xâu có độ dài bằng nhau thì xâu nào có thứ tự từ điển nhỏ hơn sẽ được sắp xếp lên trước.
Ràng buộc: ~0 < N \leq 10^6~
Input 01:
3
ab abcde abc
Output 01:
abcde abc ab
Input 02:
6
abc efghi abcdef abcde 123 abc1234
Output 02:
abc1234 abcdef abcde efghi 123 abc
Sắp xếp nhanh (quick sort) với chốt là phần tử cuối cùng (bên phải)
Nộp bàiPoint: 1
Cho mảng A có N phần tử, hãy sắp xếp lại mảng A theo thứ tự tăng dần sử dụng thuật toán sắp xếp nhanh quick sort với chốt (pivot) là phần tử cuối cùng
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input 01:
7
1 5 2 4 10 9 8
Output 01:
1 2 4 5 8 9 10
Input 02:
14
10 8 9 12 11 3 1 2 7 5 6 2 3 4
Output 02:
1 2 2 3 3 4 5 6 7 8 9 10 11 12
Sắp xếp nhanh (quick sort) với chốt là phần tử đầu tiên (bên trái)
Nộp bàiPoint: 1
Cho mảng A có N phần tử, hãy sắp xếp lại mảng A theo thứ tự tăng dần sử dụng thuật toán sắp xếp nhanh quick sort với chốt (pivot) là phần tử đầu tiên
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input 01:
7
1 5 2 4 10 9 8
Output 01:
1 2 4 5 8 9 10
Input 02:
14
10 8 9 12 11 3 1 2 7 5 6 2 3 4
Output 02:
1 2 2 3 3 4 5 6 7 8 9 10 11 12