Hướng dẫn giải của CHÈN THÊM PHẦN TỬ VÀ SẮP XẾP GIẢM DẦN (CTGMD.CPP)
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
1. Phân tích bài toán
Ta cần thực hiện hai công việc:
- Đưa số ~k~ vào dãy ban đầu.
- Sắp xếp toàn bộ ~n+1~ phần tử theo thứ tự giảm dần.
Dãy ban đầu không được cho là đã sắp xếp, vì vậy không thể chỉ tìm vị trí để chèn ~k~ rồi in ngay.
2. Ý tưởng thuật toán
Sử dụng mảng (hoặc vector) để lưu các số. Sau khi nhập ~n~ phần tử, thêm ~k~ vào cuối dãy. Dùng hàm sort với tiêu chí greater<int>() để sắp xếp giảm dần, rồi in kết quả.
3. Các bước thực hiện
- Bước 1: Nhập ~n~ và ~n~ phần tử của dãy.
- Bước 2: Nhập ~k~, thêm ~k~ vào dãy bằng
push_back(k). - Bước 3: Sắp xếp giảm dần bằng
sort(a.begin(), a.end(), greater<int>()). - Bước 4: Duyệt dãy và in các phần tử, cách nhau một dấu cách.
4. Minh họa
Với ~n=3~, dãy ban đầu là 1 5 2 và ~k=4~:
- Sau khi thêm:
1 5 2 4. - Sau khi sắp xếp giảm dần:
5 4 2 1.
Vậy kết quả là 5 4 2 1.
5. Độ phức tạp
- Nhập và thêm phần tử: ~O(n)~.
- Sắp xếp ~n+1~ phần tử: ~O(n\log n)~.
- In kết quả: ~O(n)~.
Tổng độ phức tạp thời gian: ~O(n\log n)~.
Độ phức tạp bộ nhớ: ~O(n)~ để lưu dãy.
6. Chương trình C++ tham khảo
#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<int> a;
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
a.push_back(x);
}
cin >> k;
a.push_back(k);
sort(a.begin(), a.end(), greater<int>());
for (int i = 0; i < (int)a.size(); i++) {
if (i > 0) cout << " ";
cout << a[i];
}
cout << endl;
return 0;
}
7. Lưu ý khi làm bài
- Dãy có thể chứa số âm, số ~0~ và các phần tử trùng nhau; không được loại bỏ phần tử trùng.
- Số ~k~ cũng có thể bằng một phần tử đã có trong dãy.
- Dùng
greater<int>()để sắp xếp giảm dần; mặc địnhsortsắp xếp tăng dần. - Với ~n \le 10^5~, thuật toán sắp xếp ~O(n\log n)~ đáp ứng tốt giới hạn đề bài.
Đang tải...