Kết quả: Ghi ra file văn bản Subseq.out Một số nguyên là giá trị tổng đoạn con lớn nhất tìm được... Kết quả: Ghi ra file văn bản Primemax.inp - Dòng thứ nhất là số nguyên tố lớn
Trang 11
MỤC LỤC
ĐẶT VẤN ĐỀ 1
1 Lý do chọn đề tài 2
2 Cấu trúc nội dung 2
3 Mục đích nghiên cứu 2
4 Phương pháp nghiên cứu 3
5 Giới hạn phạm vi nghiên cứu của đề tài 3
NỘI DUNG 4
PHẦN 1 KIẾN THỨC VỀ MẢNG MỘT CHIỀU 4
I Khái niệm 4
II Cách khai báo 4
III Cách truy nhập đến phần tử mảng 4
IV Cách nhập/xuất mảng 5
V Một số thuật toán cơ bản trên mảng một chiều 5
PHẦN II BÀI TẬP 12
1 Bài tập chủ đề tìm giá trị nhỏ nhất, lớn nhất 12
2 Bài tập chủ đề sắp xếp mảng 17
3 Bài tập chủ tìm kiếm trên mảng 24
4 Bài tập chủ đề tìm đoạn con dài nhất của thỏa mãn điều kiện cho trước 36
5 Bài tập chủ đề cắt mảng thành K đoạn thỏa mãn điều kiện cho trước 42
KẾT QUẢ ÁP DỤNG 44
KẾT LUẬN 44
TÀI LIỆU THAM KHẢO 45
PHỤ LỤC: HƯỚNG DẪN VÀ CHƯƠNG TRÌNH MẪU 46
1 Bài tập chủ đề tìm giá trị nhỏ nhất, lớn nhất 46
2 Bài tập chủ đề sắp xếp mảng 53
3 Bài tập chủ đề tìm kiếm trên mảng 60
4 Bài tập chủ đề tìm đoạn con dài nhất thỏa mãn điều kiện cho trước 80
5 Bài tập chủ đề cắt mảng thành K đoạn thỏa mãn điều kiện cho trước 89
Trang 2
2
ĐẶT VẤN ĐỀ
1 Lý do chọn đề tài
Mảng 1 chiều là cấu trúc dữ liệu đầu tiên và cũng là cấu trúc dữ liệu đơn giản
và phổ biến nhất Mảng 1 chiều giúp giải quyết được nhiều lớp bài toán Vì vậy, nó được sử dụng nhiều trong các kỳ thi học sinh giỏi Tin học
Với nhiều năm tham gia giảng dạy, bồi dưỡng học sinh giỏi và việc nghiên cứu các vấn đề về lập trình theo từng dạng bài tập từ cơ bản đến phức tạp của ngôn ngữ lập trình C++, các tài liệu về phương pháp giảng dạy phục vụ cho việc học tập, ôn thi học sinh giỏi của học sinh cũng như giảng dạy của giáo viên Từ đó, tôi viết sáng
kiến kinh nghiệm với đề tài “Lớp các bài toán cơ bản trên mảng một chiều lập trình bằng ngôn ngữ C++” Với mong muốn phần nào giúp học sinh cũng như giáo viên có tài liệu tham khảo phục vụ cho việc học tập và giảng dạy
2 Cấu trúc nội dung
Phần 1 Kiến thức về Mảng 1 chiều
1 Khái niệm về mảng một chiều
2 Khai báo mảng
3 Truy nhập phần tử mảng
4 Nhập/xuất mảng
5 Một số thuật toán cơ bản trên mảng 1 chiều
Phần 2 Bài tập
1 Tìm giá trị nhỏ nhất, giá trị lớn nhất
2 Sắp xếp trên mảng
3 Tìm kiếm trên mảng
4 Tìm đoạn con dài nhất thỏa mãn điều kiện cho trước
5 Cắt mảng thành K đoạn thỏa mãn điều kiện cho trước
3 Mục đích nghiên cứu
Trong quá trình nghiên cứu và giảng dạy, tôi nhận thấy ngôn ngữ lập trình C++ cung cấp nhiều thư viện nên rất tiện lợi trong quá trình lập trình giải các bài toán, đồng thời lớp các bài toán trên mảng 1 chiều cũng được vận dụng nhiều trong lập trình Vì vậy, tôi viết đề tài này với mục đích:
- Thứ nhất, trao đổi cùng với các đồng nghiệp về việc vận dụng ngôn ngữ C++ trong việc lập trình
- Thứ hai, là tài liệu cho giáo viên phục vụ giảng dạy, bồi dưỡng HSG
Trang 33
4 Phương pháp nghiên cứu
Kinh nghiệm bản thân, thảo luận, sưu tầm tài liệu, thử nghiệm thực tế, rút kinh nghiệm từ các tiết dạy trên lớp
5 Giới hạn phạm vi nghiên cứu của đề tài
Đề tài chủ yếu nghiên cứu hệ thống lớp các bài toán cơ bản trên mảng 1 chiều
và lập trình bằng ngôn ngữ C++
Đề tài có khả năng áp dụng rộng rãi vào giảng dạy, bồi dưỡng học sinh giỏi Tin học cho giáo viên và học sinh THCS, THPT trên địa bàn toàn tỉnh Nghệ An
Trang 44
NỘI DUNG
Việc nắm vững lý thuyết về mảng một chiều và các bài toán cơ bản trên mảng một chiều là điều rất quan trọng, đó là cơ sở để các em học sinh vận dụng và giải quyết các bài toán phức tạp và nâng cao Sau đây, tôi xin trình bày các kiến thức và các bài tập cơ bản về mảng 1 chiều sử dụng ngôn ngữ lập trình C++ mà tôi đã tìm hiểu và vận dụng có hiệu quả trong quá trình giảng dạy
PHẦN 1 KIẾN THỨC VỀ MẢNG MỘT CHIỀU
I Khái niệm
Mảng một chiều là dãy hữu hạn các phần tử có cùng kiểu dữ liệu Khi nói đến
mảng ta cần xác định được:
- Kiểu dữ liệu của các phần tử mảng
- Số phần tử của mảng
II Cách khai báo
1 Khai báo không có khởi tạo
<Tên kiểu dữ liệu> <Tên biến mảng> [Số phần tử];
Ví dụ: int a[5]; float b[10];
2 Khai báo có khởi tạo
<Tên kiểu dữ liệu> <Tên biến mảng> [Số phần tử] = {dãy giá trị}; Hoặc: <Tên kiểu dữ liệu> <Tên biến mảng>[ ] = {dãy giá trị} ;
(Lưu ý: Trong trường hợp không khai báo số phần tử mảng thì mảng vừa đủ lớn để giữ các giá trị được khởi tạo)
Trong đó: - Tên kiểu dữ liệu: là các kiểu dữ liệu cơ bản hoặc kiểu dữ liệu có cấu trúc
- Tên biến mảng: do người dùng đặt theo quy tắc đặt tên
- Số phần tử: kích thước mảng
Ví dụ: float x[5]={3,5,7,2,1};
int a[ ] = {0, 2, 4, 6, 8};
III Cách truy nhập đến phần tử mảng
<Tên biến mảng> [Chỉ số]
Ví dụ: int a[5] 0 1 2 3 4
Trang 55
a[1] = 3; a[3]= 7;
Lưu ý: - Mảng trong C++ được đánh số bắt đầu từ 0
- Khi khai báo mảng cần khai báo số phần tử thừa ra
IV Cách nhập/xuất mảng
4.1 Nhập mảng
Cách 1: Biết số phần tử của mảng
cin>>n;
for (int i = 1 ; i < n; i++) cin>>a[i];
Cách 2: Chưa biết số phần tử của mảng
for (int i=1 ; i <=n; i++) cout << a[i];
V Một số thuật toán cơ bản trên mảng 1 chiều
5.1 Tìm giá trị nhỏ nhất, lớn nhất
Bài toán: Tìm Min, Max của mảng A gồm N phần tử
Ý tưởng:
- Gán Min = A[1] (Max= A[1])
- Ta duyệt từ phần tử thứ 2 đến cuối mảng, gặp phần tử A[i] nào bé hơn Min (lớn hơn Max) gán lại Min = A[i]( Max = A[i])
if (Min > A[i]) Min = A[i];
if (Max < A[i]) Max = A[i];
}
Cout << “Min =” << Min << “ Max ”<< Max;
Trang 66
Cách 2: Sử dụng hàm min, max
Min = INT_MAX; Max = INT_MIN;
for (i = 1; i < N; i++)
{
Min = min (Min, A[i]);
Max = max (Max, A[i])
Ý tưởng thuật toán:
Duyệt mảng từ vị trí đầu đến hết mảng, nếu gặp phần tử nào của mảng bằng X thì in ra vị trí, nếu duyệt hết mảng mà không tìm thấy thì thông báo không tìm thấy Chia mảng A thành hai mảng: Mảng chưa sắp(CS) và mảng đã sắp (DS)
- Khởi tạo: CS chính là mảng A, DS bằng rỗng
- Lấy phần tử đầu tiên của tập chưa sắp (CS), so sánh với mọi phần tử đứng sau nó, nếu thấy phần tử nào không thõa mãn điều kiện thì tráo đổi hai phần tử đó cho nhau Đưa phần tử đầu tiên của mảng CS này vào mảng DS
- Lặp lại cho đến phần tử cuối cùng của mảng CS
Cuối cùng ta được mảng đã sắp xếp chính là mảng DS
Thuật toán:
for (i=1; i<= N-1; i++)
for (j = i+1; j<= N; j++)
if (A[i] > A[j]) swap(A[i], A[j]);
for (i=1; i<= N;i++) cout << A[i]<< “ ”;
5.2.2 Thuật toán sắp xếp nhanh( Quick sort)
Ý tưởng thuật toán:
Chọn phần tử x ở giữa của dãy làm chuẩn để so sánh Ta phân hoạch dãy này thành 3 dãy con liên tiếp nhau:
- Dãy con thứ nhất gồm phần tử có khoá nhỏ hơn x.key
- Dãy con thứ hai gồm các phần tử có khoá bằng x.key
Trang 77
- Dãy con thứ ba gồm các phần tử có khoá lớn hơn x.key
Sau đó áp dụng giải thuật phân hoạch này cho dãy con thứ nhất nhất và dãy con thứ ba, nếu các dãy con có nhiều hơn một phần tử
Cụ thể là xét một doạn của dãy từ thành phần L đến thành phần thứ H
- Lấy giá trị của thành phần thứ (L+H) Div 2 gán vào biến X
- Cho i ban đầu là L
- Cho j ban đầu là H
- Lặp lại
Chừng nào còn A[i] < X thì tăng i
Chừng nào còn A[j] > X thì giảm j
i<=j thì
+ Hoán vị A[i] và A[j]
+ Tăng i + Giảm j Cho đến khi i>j
+ Sắp xếp đoạn từ A[L] đến A[j]
+ Sắp xếp đoạn từ A[i] đến A[H]
Trang 8+) Sắp xếp n phần tử giảm từ a[1] đến a[n]:
Sort (a +1, a+ n + 1, greater < int >( ));
+) Sắp xếp n phần tử giảm từ a[0] đến a[n - 1]:
Sort (a , a+ n, greater < int >( ));
5.3 Tìm kiếm trên mảng một chiều
5.3.1 Tìm kiếm tuần tự
Bài toán: Cho mảng A gồm N phần tử và phần tử X Tìm kiếm xem phần tử X
có xuất hiện trong mảng A hay không? Nếu có thì xuất hiện ở những vị trí nào?
Trang 9Cout << “xuất hiện ở vị trí:”<< i;
timthay=true;
}
if not (timthay) cout<< “Khong tim thay”;
Trong trường hợp chỉ cần xuất ra vị trí của một phần tử ta cải tiến lại chương trình để chương trình thực hiện nhanh hơn
Timthay = false;
for (i = 1; i<= N; i++)
if (X = A[i]) {
Cout << “xuất hiện ở vị trí:”<< i;
a Thuật toán tìm kiếm nhị phân cơ bản
Bài toán: Với mảng A đã được sắp xếp tăng dần, độ phức tạp của tìm kiếm
tuần tự không đổi Tận dụng thông tin của mảng đã được sắp xếp để giới hạn vị trí của giá trị cần tìm trong mảng
Ý tưởng: Thuật toán tìm kiếm nhị phân
So sánh x với phần tử chính giữa của mảng A
Nếu x là phần tử giữa thì dừng
Nếu không, xác định xem x có thể thuộc nửa trái hay nửa phải của A
Lặp lại 2 bước trên với nửa đã xác định
Trang 10if(A[mid] == key) return mid;
if(A[mid] > key) r = mid - 1;
b Thuật toán toán tìm kiếm một phần tử có giá trị gần bằng x
* Tìm kiếm phần tử lớn nhất nhưng nhỏ hơn hoặc bằng x
int binarySearch(int A[], int key, int left, int right)
* Tìm kiếm phần tử nhỏ nhất nhưng lớn hơn hoặc bằng x
int binarySearch(int A[], int key, int left, int right)
{
int mid, l=left, r=right; int kq=0;
while(l <= r)
Trang 1212
PHẦN II BÀI TẬP
1 Bài tập chủ đề tìm giá trị nhỏ nhất, lớn nhất
Bài 1: Cho dãy số gồm n phần tử a1, a2, , an
Tìm giá trị lớn nhất của biểu thức (aj - ai) với (1<= i < j <=n)
Dữ liệu: Vào từ file văn bản Seq1.inp
- Dòng đầu nhập số nguyên dương n
- Dòng thứ 2 nhập n số nguyên a1, a2, ,an
Kết quả: Ghi ra file văn bản Seq1.out
Giá trị lớn nhất của biểu thức
Yêu cầu: Hãy cho biết điểm cao nhất (thủ khoa) là bao nhiêu
Dữ liệu: Vào từ file văn bản Thukhoa.inp
- Dòng 1 chứa số nguyên dương N (N < 100)
- Dòng 2 chứa N số thực a1, , an (0 < ai < 20)
Kết quả: Ghi ra file văn bản Thukhoa.out
- Chỉ một dòng duy nhất chứa một số thực là điểm thủ khoa (lấy đến 2 chữ số
ở phần thập phân)
Ví dụ: Thukhoa.inp Thukhoa.out
Trang 1313
Bài 3 Ngôi sao
Một em bé khi rảnh rỗi ngồi xếp n ngôi sao (2 <= n <= 100) rồi xếp thành môt
hàng có đánh sồ thứ tự Do không chia đúng tỉ lệ trước khi xếp sao và trong lúc xếp
không tỉ mỉ nên kích thước của các ngôi sao to nhỏ khác nhau Em bé lại chơi trò
tìm ngôi sao có kích thước nhỏ nhất và lớn nhất Sau khi tìm xong em lấy ngôi sao
nhỏ nhất đổi chỗ cho ngôi sao lớn nhất rồi xâu chúng thành một vòng tròn
Hãy giúp em xếp lai chiếc vòng như em muốn Nếu có nhiều ngôi sao nhỏ nhất
và lớn nhất thì đổi chỗ ngôi sao lớn nhất có chỉ số nhỏ nhất với ngôi sao nhỏ nhất có
chỉ số lớn nhất
Dữ liệu: Vào từ file văn bản Ngoisao.inp
- Dòng đầu nhập số nguyên dương n
- Dòng thứ 2 nhập n số nguyên a1, a2, , an
Kết quả: Ghi ra file văn bản Ngoisao.out: Các ngôi sao đã được đổi chỗ
Bài 4 Giá trị nhỏ nhất
Cho dãy số nguyên A = (a1, a2, , an) và một số nguyên dương k ≤ n Với mỗi
giá trị i (1 ≤ i ≤ n – k + 1 )
Hãy xác định giá trị nhỏ nhất trong phần tử liên tiếp: ai, ai+1, , ai+k-1
Dữ liệu: Vào từ file văn bản Minimum.inp
- Dòng 1 chứa hai số nguyên dương n và k, trong đó 1 ≤ k ≤ n ≤ 1000, cách
nhau bởi dấu cách
- Dòng 2 chứa n số nguyên dương (a1, a2, , an) cách nhau bởi dấu cách
Kết quả: Ghi ra file văn bản Minimum.out
Ghi ra màn hình n–k+1 dòng, dòng thứ i ghi giá trị nhỏ nhất trong các phần tử
Trang 1414
Giải thích test đề bài: 3 số đầu tiên là 2 1 5 số nhỏ nhất là 1, 3 số tiếp theo 1 5
3 số nhỏ nhất là 1, 3 số cuối cùng là 5 3 4 số nhỏ nhất là 3
Bài 5 Đoạn con
Cho dãy số nguyên a1, a2, , aN (|ai| < 109, N < 105) Một tập hợp khác rỗng các
số hạng liên tiếp {ai, ai+1, , ak} (i k) gọi là một đoạn con của dãy đó Với mỗi đoạn con ta tính tổng tất cả các số hạng của nó
Yêu cầu: Tìm giá trị lớn nhất trong số các tổng của các đoạn con của dãy đã
cho
Dữ liệu: Vào từ file văn bản Subseq.inp
Dòng đầu chứa số N, dòng thứ i trong N dòng tiếp theo chứa số ai
Kết quả: Ghi ra file văn bản Subseq.out
Một số nguyên là giá trị tổng đoạn con lớn nhất tìm được
Ví dụ:
7
1 -2 -1
4 -1
5 -2
Yêu cầu: Hãy cho biết thời gian của bài thi được trao thưởng và có bao nhiêu
bài thi được trao thưởng
Dữ liệu: Vào từ file văn bản Laptrinh.inp
- Dòng 1 chứa số nguyên dương N (N < 100)
- Dòng 2 chứa N số nguyên a1, , an (0 < ai < 100)
Trang 1515
Kết quả: Ghi ra file văn bản Laptrinh.out
- Dòng thứ nhất chứa một số nguyên là thời gian ít nhất tìm được
- Dòng thứ hai chứa một số nguyên là số bài thi cùng đạt thời gian ít nhất
1 Tìm số nguyên tố lớn nhất của dãy
2 Số nào xuất hiện nhiều nhất trong dãy
Dữ liệu: Vào từ file văn bản Primemax.inp
- Dòng đầu tiên là số n
- Dòng thứ hai là n số nguyên mỗi số cách nhau bởi một dấu cách
Kết quả: Ghi ra file văn bản Primemax.inp
- Dòng thứ nhất là số nguyên tố lớn nhất của dãy, nếu không có số nguyên tố thì in ra 0
- Dòng thứ hai là số xuất hiện nhiều nhất trong dãy, nếu có nhiều số có số lần xuất hiện bằng nhau thì in ra số đầu tiên
Bài 8 Khoảng cách xa nhất
Cho dãy số nguyên A kích thước N Tìm khoảng cách xa nhất giữa hai phần tử bằng nhau trong A
Dữ liệu: Vào từ file văn bản Kcmax.inp
Dòng đầu tiên chứa số nguyên T là số bộ dữ liệu kiểm tra Mỗi bộ dữ liệu gồm:
- Dòng đầu chứa số nguyên dương N là số phần tử của A
Trang 16Kết quả: Ghi ra file văn bản Kcmax.out
Gồm T dòng/ mỗi dòng chứa một số nguyên là kết quả bài toán
Bài 9 Biểu thức nhân, cộng
Cho 𝑛 số nguyên dương 𝑎𝑖, 𝑖 = 1 𝑛, bạn phải đặt giữa 𝑛 số nguyên dương này
2 phép nhân và 𝑛 − 3 phép cộng sao cho kết quả biểu thức là lớn nhất
Ví dụ: với 𝑛 = 5 và dãy 𝑎𝑖 là 4, 7, 1, 5, 3 thì bạn có thể có các biểu thức:
4 + 7 * 1 + 5 * 3
4 * 7 *1 + 5 + 3
Chú ý: Không được thay đổi thứ tự xuất hiện của 𝑎𝑖, 𝑖 = 1 𝑛 trong biểu thức thu được
Dữ liệu: Vào từ file văn bản Express.inp
- Dòng 1 chứa số nguyên dương 𝑛 (4 ≤ 𝑛 ≤ 1.000)
- N dòng tiếp theo, dòng thứ 𝑖 + 1 chứa số nguyên dương 𝑎𝑖 (1 ≤ 𝑎𝑖 ≤10.000, 𝑖 = 1 𝑛)
Kết quả: Ghi ra file văn bản Express.out
Ghi 1 số nguyên dương duy nhất là giá trị lớn nhất của biểu thức thu được
Trang 17- Các dòng sau chứa N số nguyên dương mô tả dãy số X(0 ≤ xi ≤ 30000)
Kết quả: Ghi ra file văn bản minima.out
Gồm một dòng chứa số S tìm được
Bài 11 Khối hình chữ nhật
Một viên gạch có dạng khối hộp chữ nhật với ba kích thước là a, b, c Người ta muốn biết: có thể đưa viên gạch đó qua lỗ hổng hình chữ nhật có kích thước x, y hay không?
Dữ liệu: Vào từ file văn bản Khoihcn.input
Các số nguyên dương a, b, c, x và y
Kết quả: Ghi ra file văn bản Khoihcn.output
Đưa ra chuỗi thông báo "CO", nếu có thể đưa viên gạch qua lỗ hổng; ngược lại,
in ra chuỗi thông báo "KHONG"
Ví dụ:
Trang 1818
Khoihcn.input Khoihcn.output
Bài 12 Khoảng cách
Một du khách trúng một vé máy bay có thể bay đến bất kì thành phố nào trong nước, xuất phát từ thủ đô Hà Nội Nhân dịp đó, người này muốn đi thêm các thành phố lân cận, nhưng vì lo lắng không đủ chi phí nên ông chỉ muốn tìm những thành phố gần nhau nhất Tuy nhiên, hãng hàng không chỉ cho ông biết thông tin về khoảng cách giữa các thành phố so với thủ đô Hà Nội Giả sử rằng tất cả các thành phố đề nằm trên một đường thẳng bắt đầu từ thủ đô Hà Nội, hãy giúp người này tìm ra khoảng cách ngắn nhất để có thể tính toán chi phí cho chuyến đi
Dữ liệu: Vào từ file văn bản Khoangcach.inp
Dữ liệu của vào bao gồm một vài bộ test Mỗi bộ test bao gồm:
Dòng đầu tiên là số lượng thành phố N (1<N<106)
N dòng tiếp theo chứa khoảng cách của thành phố so với thủ đô
Kết quả: Ghi ra file văn bản Khoangcach.out
Với mỗi bộ test, là một số nguyên - Khoảng cách ngắn nhất tìm được
Trang 1919
Bài 13 Bút màu
Tí nhờ mẹ đi mua bút màu để chuẩn bị cho giờ vẽ tranh trên lớp Tí dặn mẹ mua 4 bút màu khác nhau, nhưng mẹ Tí lại quên mất, chỉ nhớ là mua 4 cái bút màu cho Tí
Về đến nhà, Tí bắt đền mẹ vì đã không mua đủ 4 màu cho Tí Tí đòi mẹ ra hiệu sách mua thêm, để có đủ 4 màu vẽ cho ngày mai
Các bạn hãy tính xem mẹ Tí cần mua thêm ít nhất bao nhiêu chiếc bút màu?
Dữ liệu: Vào từ file văn bản Butmau.inp
Một dòng duy nhất gồm 4 số nguyên s1, s2, s3, s4 (1<= s1, s2, s3, s4 <= 109)
thể hiện màu của 4 chiếc bút mà mẹ vừa mới mua cho Tí
Kết quả: Ghi ra file văn bản Butmau.out
Số lượng bút màu ít nhất cần mua thêm cho Tí
Dữ liệu: Vào từ file văn bản Milk.inp
- Dòng thứ nhất là số nguyên n (1 ≤ n ≤ 100) là số lượng con bò
- Dòng thứ hai gồm n số nguyên a1, a2, , an (1 ≤ ai ≤ 1000) là sản lượng sữa của các con bò
Kết quả: Ghi ra file văn bản Milk.out
Là một số nguyên xác định số lít sữa nhiều nhất mà anh Bo có thể vắt được
4
4 4 4 4
10
Trang 20- Trong test 1: vắt sữa con bò 1 (được 4), lượng sữa còn lại là 3 3 3; vắt sữa con
bò 2 (được 3), lượng sữa còn lại là 2 2, vắt sữa con bò 3 (được 2) và con bò 4 (được 1), tổng cộng 10
- Trong test 2: vắt sữa con bò 1 (được 2), lượng sữa còn lại là 0 3 2; vắt sữa con
bò 3 (được 3) và vắt sữa con bò 4 (được 1) tổng cộng 6
Bài 15 Cấp số cộng
Dãy cấp số cộng là một dãy tăng dần, trong đó số đứng sau hơn số đứng trước một giá trị d, d được gọi là công sai
Ví dụ: 1 4 7 10 là một dãy cấp số cộng 4 phần tử công sai là 3
2 6 10 14 18 là một dãy cấp số cộng 5 phần tử công sai là 4
3 5 7 10 không phải là dẫy cấp số cộng 4 phần tử vì 7 – 5 ≠ 10 – 7
Trong giờ kiểm tra Toán, Tý đã tìm được đáp án của một bài toán là 4 số tạo thành một cấp số cộng, theo yêu cầu của đề bài Tèo ngồi bên cạnh, không chép được bài của Tý nên tìm cách chơi xỏ Tý Lợi dụng lúc Tý không để ý Tèo dùng bút xóa xóa đi 4 số của Tý rồi viết lại 3 số nhưng không theo thứ tự ban đầu
Tý xem lại bài thấy bài mình mất 1 số nên đã nhờ bạn giúp Tý khôi phục lại số
bị thiếu ban đầu
Dữ liệu: Vào từ file văn bản Capsocong.inp
Gồm 3 số nguyên có giá trị tuyệt đối nhỏ hơn 1000, cả 3 số được viết trên 1 dòng
Dữ liệu vào luôn được đảm bảo có đáp án
Kết quả: Ghi ra file văn bản Capsocong.out
Số còn lại bị thiếu trong cấp số cộng Nếu có nhiều đáp án, hãy in ra số lớn nhất
Trang 2121
Bài 16 Biểu thức
Một dãy gồm n số nguyên không âm a1, a2,…, a n được viết thành một hàng
ngang, giữa hai số liên tiếp có một khoảng trắng, như vậy có tất cả (n-1) khoảng trắng Người ta muốn đặt k dấu cộng và (n-1-k) dấu trừ vào (n-1) khoảng trắng đó
để nhận được một biểu thức có giá trị lớn nhất
Ví dụ, với dãy gồm 5 số nguyên 28, 9, 5, 1, 69 và k = 2 thì cách đặt
28+9-5-1+69 là biểu thức có giá trị lớn nhất
Yêu cầu: Cho dãy gồm n số nguyên không âm a1, a2,…, a n và số nguyên
dương k, hãy tìm cách đặt kdấu cộng và (n-1-k) dấu trừ vào (n-1) khoảng trắng để
nhận được một biểu thức có giá trị lớn nhất
Dữ liệu: Vào từ file văn bản Bieuthuc.inp
- Dòng đầu chứa hai số nguyên dương n, k (k < n);
- Dòng thứ hai chứa n số nguyên không âm a1, a2,…, a n (a n ≤ 106)
Kết quả: Ghi ra file văn bản Bieuthuc.out
Một số nguyên là giá trị của biểu thức đạt được
- Có 50% số test ứng với 50% số điểm có n ≤ 105 và k = 1;
- Có 50% số test còn lại ứng với 50% số điểm có n ≤ 105;
Bài 17 Quyết chiến
Có một cuộc quyết chiến giữa 2 phe Radiant và Dire Mỗi phe có N chiến binh, mỗi chiến binh đều biết chỉ số sức mạnh của mình Cuộc quyết chiến giữa 2 phe phải được tuân thủ luật sau:
Có N vòng đấu, mỗi vòng đấu Radiant và Dire cử ra 1 chiến binh để quyết chiến với bên kia Chiến binh của bên nào thắng thì bên đó sẽ được 1 điểm, bên thua cuộc được 0 điểm
Trước khi cuộc quyết chiến diễn ra, thủ lĩnh của cả 2 phe đều biết được thực lực các chiến binh của đối phương Thủ lĩnh Dire là 1 người tài trí hơn người, ông
ta biết cách sắp xếp thứ tự thi đấu sao cho bên mình có thể đạt được nhiều điểm nhất
có thể Bạn hãy đoán xem với danh sách 2 đội đã cho trước, Dire có thể có tối đa bao nhiêu điểm
Trang 2222
Dữ liệu: Vào từ file văn bản Quyetchien.inp
- Dòng đầu tiên chứa số N (1 ≤ n ≤ 2*105)
- Dòng thứ 2 gồm n số nguyên dương a[1], a[2], …, a[n] là chỉ số sức mạnh của các chiến binh phe Radiant
- Dòng thứ 3 gồm n số nguyên dương b[1], b[2], …, b[n] là chỉ số sức mạnh của các chiến binh phe Dire
(1 ≤ ai, bi ≤ 2*N)
Giả sử rằng chỉ số sức mạnh của tất cả các chiến binh 2 phe đều khác nhau
Kết quả: Ghi ra file văn bản Quyetchien.out
Số điểm tối đa Dire có thể đạt được
Bài 18 Chạy đua Maratong
John cho các con bò của mình chạy đua marathon! Thời gian bò N (1 <= N <= 100000) về đích được biểu diễn theo dạng Số giờ (0 <= Số giờ <= 99), Số phút (0
<= Số phút <= 59), và số giây (0 <= Số giây <= 59) Để xác định nhà vô địch, John phải sắp xếp các thời gian (theo số giờ, số phút, và số giây) theo thứ tự tăng dần, thời gian ít nhất xếp đầu tiên
Dữ liệu: Vào từ file văn bản maratong.inp
- Dòng 1: Số nguyên N
- Dòng 2 N+1: Dòng i+1 chứa thời gian bò i được mô tả bởi 3 số nguyên cách bởi dấu cách: Số Giờ , Số Phút, Số giây
Kết quả: Ghi ra file văn bản maratong.out
Mỗi dòng chứa thời gian của 1 con bò là 3 số nguyên cách nhau bởi dấu cách sau khi đã sắp xếp
Ví dụ: Maratong.inp Maratong.out
Trang 23- Người thứ 1 và 2 chung một nhóm (chiều cao 6, 7)
- 3 và 4 chung một nhóm (chiều cao 3, 4)
- 5 đi lẻ (chiều cao 9)
Vậy ta sẽ có 3 nhóm: {1, 2}, {3, 4} và {5}
Bạn hãy giúp Pudge tính xem có bao nhiêu nhóm trong rừng để anh còn biết mà hù dọa
Dữ liệu: Vào từ file văn bản Phannhom.inp
- Dòng đầu chứa 2 số nguyên N, K (0 ≤ N ≤ 105, 1 ≤ K ≤ 106)
- Dòng thứ hai trong chứa N số nguyên dương – chiều cao của mỗi người (giá trị không vượt quá 106)
Kết quả: Ghi ra file văn bản Phannhom.out
Dòng duy nhất chứa số nhóm trong rừng
Giải thích test:
Nhóm 1 những người có chiều cao: 2 1 3 4
Nhóm 2 gồm: 6 7
Nhóm 3 gồm: 9
Bài 20 Thời gian
Có n bệnh nhân chờ được khám bệnh tại một phòng khám chỉ có một bác sỹ (tại một thời điểm chỉ khám được cho 1 bệnh nhân :D) Bệnh nhân thứ i đến phòng khám tại thời điểm ti và nếu được khám bệnh, anh (cô) ta sẽ phải mất thời gian là di
Hãy tính xem thời điểm nhỏ nhất mà vị bác sỹ nọ trong phòng khám khám xong cho
n bệnh nhân nói trên
Dữ liệu: Vào từ file văn bản Thoigian.inp
Trang 2424
+ Dòng đầu tiên ghi n (n ≤ 100)
+ n dòng tiếp theo, mỗi dòng ghi hai số lần lượt là thời điểm đến khám và thời
gian khám của bệnh nhân
Kết quả: Ghi ra file văn bản Thoigian.out
Một số nguyên duy nhất là đáp số tìm được
3 Bài tập chủ để tìm kiếm trên mảng
Bài 21 Số thân thiện
Số tự nhiên có rất nhiều tính chất thú vị Ví dụ với số 23, số đảo ngược của nó là 32 Hai số này có ước chung lớn nhất là 1 Những số như thế được gọi là số thân thiện, tức là số 23 được gọi là số thân thiện, số 32 cũng được gọi là số thân thiện Hãy nhập vào 2 số nguyên a,b (10≤a≤b≤30000) Hãy đếm xem trong khoảng
từ a đến b (kể cả a và b) có bao nhiêu số thân thiện
Dữ liệu: Vào từ file văn bản Thanthien.inp
Bao gồm một dòng chứa 2 số a,b Hai số được cách nhau bằng một khoảng trắng
Kết quả: Ghi ra file văn bản Thanthien.out
Bao gồm một dòng là kết quả của bài toán
Ví dụ:
Thanthien.inp Thanthien.out
Trang 2525
Bài 22 Xây hàng rào
Vào cuối năm, một người thợ mộc dọn lại nhà kho của mình thì thấy trong kho còn thừa n cọc gỗ nhỏ (1<=n<=108) Để tiết kiệm, ông quyết định sử dụng số cọc đó
để xây hàng rào quanh vườn Nhưng do độ dài các cọc chênh lệch nhau quá lớn nên ông chỉ chọn ra 1 số cọc nằm trong khoảng [x;y] (x,y là những số thực và 0<x<105)
để xây
Yêu cầu : Hãy giúp người đó tính số cọc người đó chưa sử dụng
Dữ liệu: Vào từ file văn bản sococ.inp
- Dòng đầu gồm 1 số nguyên n và 2 số thực x,y Mỗi số cách nhau 1 dấu cách
- Dòng tiếp theo gồm n số thực ai
Mỗi số cách nhau 1 dấu cách
Kết quả: Ghi ra file văn bản sococ.out
Xuất ra số cọc người đó chưa sử dụng
Do một vài sơ suất người in vé đã in trên 1 số vé số vừa chia hết cho 3, vừa là số âm chẵn Để khắc phục thì những người có vé in các số đó đều được tính vào cả 2 hàng ghế
Yêu cầu: Viết chương trình tìm số vé đã bán ra, số người ngồi hàng ghế đầu
và số người ngồi hàng ghế sau
Dữ liệu: Vào từ file văn bản Sove.inp
- Một dòng duy nhất ghi các số được in trên vé
Kết quả: Ghi ra file văn bản Sove.out
- Số vé bán được
- Số người ngồi ghế hàng 1
- Số người ngồi ghế hàng thứ 2
Trang 26Yêu cầu: Tính tổng số lít dầu có trong các thùng nằm giữa hai thùng rỗng (Nếu
có nhiều thùng rỗng thì tính tổng số lít dầu trong các thùng nằm giữa hai thùng rỗng
ở vị trí đầu tiên và ở vị trí cuối cùng)
Dữ liệu: Vào từ file văn bản Sodau.inp
- Dòng đầu là một số n
- Dòng tiếp theo có n số là số lít dầu chứa trong mỗi thùng theo thứ tự
Kết quả: Ghi ra file văn bản Sodau.inp
Chỉ một số là số lít dầu tính được
May mắn thay, mỗi chú lùn luôn đội một chiếc mũ có một số nguyên dương nhỏ hơn 100 Bạch Tuyết là một nhà toán học thông thái, từ lâu đã nhận ra rằng tổng các số trên mũ của 7 chú lùn luôn đúng bằng 100
Hãy viết chương trình giúp Bạch Tuyết xác định bảy chú lùn của mình, tức là chọn 7 trong số 9 số sao cho có tổng bằng 100
Trang 2727
Dữ liệu: Vào từ file văn bản Patuljci.inp
Có 9 dòng, mỗi dòng chứa một số nguyên dương nhỏ hơn 100 Tất cả các số đôi một khác nhau
Chú ý rằng dữ liệu vào luôn đảm bảo tìm được duy nhất một kết quả
Kết quả: Ghi ra file văn bản Patuljci.out
Có 7 dòng mỗi dòng chứa 1 số là số của các chú lùn tìm được theo thứ tự tăng dần
Bài 26 Shell Game
Cho 3 vỏ sò dánh số 1, 2, 3 Có 1 viên bi trong 1 vỏ sò Mỗi lần chơi A tráo đổi
2 vỏ sò với nhau sau đó B đoán vỏ sò đang ở đâu B không biết ban đầu bi ở đâu Mỗi lần đoán đúng được cộng thêm 1 điểm
Dữ liệu: Vào từ file văn bản shell.inp
Trang 28- Các dòng tiếp theo ghi a1, a2, , an
Kết quả: Ghi ra file văn bản Timuoc.out
Một số nguyên duy nhất là số lượng phần tử của ước tìm được
Biết rằng Tí và Tèo ăn với tốc độ là như nhau, nhưng mỗi thanh có chiều dài khác nhau, vì vậy thời gian để ăn hết chúng cũng khác nhau Ngay khi ăn hết 1 thanh, người chơi sẽ ngay lập tức chuyển sang thanh tiếp theo Người chơi không được phép ăn 2 thanh cùng một lúc, và không được bỏ dở 1 thanh để ăn thanh khác Nếu
2 người cùng bắt đầu ăn 1 thanh sô cô la, Tèo sẽ nhường cho Tí
Cho biết trước thời gian cần thiết để ăn hết các thanh socola Các bạn hãy tính xem khi kết thúc, Tí và Tèo, mỗi người đã ăn tất cả bao nhiêu thanh?
Dữ liệu: Vào từ file văn bản Socola.inp
- Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 10^5) - số thanh socola có trên bàn
- Dòng thứ 2 chứa 1 dãy t_1, t_2, …, t_n(1 ≤ t_i ≤ 1000), với t_i (tính theo giây)
là thời gian cần thiết để ăn thanh thứ i, theo thứ tự từ trái sang phải
Kết quả: Ghi ra file văn bản Socola.out
2 giá trị là số thanh socola Tí và Tèo đã ăn
5
2 9 8 2 7
2 3
Trang 2929
Bài 29 Herding
Ba số a, b, c là vị trí 3 viên 1 lần di chuyển là tráo viên ở ngoài vào trong Đưa
ra số lần di chuyển tối thiểu và tối đa để 3 viên ở 3 vị trí liên tiếp
Dữ liệu: Vào từ file văn bản Herding.inp
a b c thuộc [1 109]
Kết quả: Ghi ra file văn bản Herding.out
Số lần tối đa và tối thiểu
Ví dụ:
2
Giải thích test: Tối thiểu 1 lần 4 đến 8 Tối đa 2 lần: 9 đến 5 và 4 đến 6
Bài 30 Mixing Milk
John có 3 con bò với hương vị khác nhau và có một ý tưởng hay là anh ấy sẽ trộn chúng lại với nhau để có được sữa pha trộn hương vị hoàn hảo
Để trộn ba loại sữa khác nhau, anh ta lấy ba cái xô đựng sữa của ba con bò Các thùng có thể có các kích cỡ khác nhau và có thể không đầy hoàn toàn Sau đó anh ta
đổ xô 1 vào xô 2, sau đó đổ xô 2 vào xô 3, sau đó đổ xô 3 vào xô 1, sau đó đổ xô 1 vào xô 2, v.v theo chu kỳ, tổng cộng 100 lần đổ (vì vậy lần đổ thứ 100 sẽ từ thùng
1 vào thùng 2) Khi Nông dân John đổ từ thùng a vào thùng b, anh ta đổ càng nhiều sữa càng tốt cho đến khi thùng a rỗng hoặc thùng b đầy
Vui lòng cho Nông dân John biết sẽ có bao nhiêu sữa trong mỗi thùng sau 100 lần đỏ
Dữ liệu: Vào từ file văn bản Mixingmilk.inp
Có 3 dòng, mỗi dòng chứa 2 số là dung tích và lương sữa trong 1 binh
Kết quả: Ghi ra file văn bản Mixingmilk.out
3 dòng mỗi dòng một số là lượng sữa trong bình tương ứng sau 100 lần đổ
Trang 30(Ba trạng thái cuối cùng lặp lại trong một chu kì )
Bài 31 New Year and Hurry
Limak sẽ tham gia vào một cuộc thi vào ngày cuối cùng của năm 2016 Cuộc thi sẽ bắt đầu lúc 20:00 và sẽ kéo dài bốn giờ, chính xác cho đến nửa đêm Sẽ có n vấn đề, được sắp xếp theo độ khó, ví dụ problem 1 là dễ nhất và problem n là khó nhất Limak biết anh ta sẽ mất 5*i phút để giải quyết vấn đề thứ i
Bạn bè của Limak tổ chức tiệc đêm giao thừa của năm mới và Limak muốn có mặt ở đó vào lúc nửa đêm hoặc sớm hơn Anh ta cần k phút để đi từ nhà của anh ta đến nơi hẹn, anh ta sẽ tham gia cuộc thi tại nhà
Có bao nhiêu vấn đề mà Limak có thể giải quyết nếu anh ta muốn tham gia buổi tiệc?
Dữ liệu: Vào từ file văn bản Newyear.inp
Dòng đầu tiên chứa hai số nguyên n và k (1 ≤ n ≤ 10, 1 ≤ k ≤ 240) – số lượng các vấn đề trong cuộc thi và số phút Limak cần để có thể đi dự tiệc
Kết quả: Ghi ra file văn bản Newyear.out
Một số nguyên, là kết quả bài toán
Dữ liệu: Vào từ file văn bản Blackjack inp
Dòng 1 chứa 2 số N và M (N < 10000, M <= 500 000)
Dòng 2 chứa N số nguyên dương, mỗi số không quá 100 000
Trang 3131
Kết quả: Ghi ra file văn bản Blackjack out
Tổng 3 quân gần M nhất và không vượt quá M
Dữ liệu vào luôn đảm bảo tồn tại đáp số
Bài 33 Cặp đôi hoàn hảo
Sao chép chương trình “Cặp đôi hoàn hảo” trên TV, các con số cũng muốn
cuộc thi như vậy Cho N số nguyên thuộc trục số, có thể có nhiều số trùng nhau Hãy sắp xếp tăng N số trên và tìm số lượng cặp đôi hoàn hảo, người ta gọi 2 số
là cặp đôi hoàn hảo nếu chúng có khoang cách < D
Dữ liệu: Vào từ file văn bản Capdoihh.inp
- Dòng đầu tiên chứa 2 số nguyên: Số lượng các số N (N < 100 000); Khoảng cách D (1 < D < 100 000 000);
- Mỗi dòng trong N dòng tiếp theo chứa 1 số nguyên tọa độ điểm nằm giữa 1
và 100000000
Kết quả: Ghi ra file văn bản Capdoihh.out,
Gồm N+l số, mỗi số trên 1 dòng, trong đó N dòng đầu tiên chứa kết quả sắp xếp, dòng cuối chứa sổ cặp đôi hoàn hảo
Trang 32Dữ liệu: Vào từ file văn bản xeptrung.inp
Dòng đầu: Ghi 2 số nguyên n, m (0 < n, m < 10^5)
Các dòng tiếp theo: dãy ai (0 < ai ≤ 3x10^4)
Kết quả: Ghi ra file văn bản xeptrung.out
Một số duy nhất là số k tìm được
Chú ý: Có 60% số test N <= 1000
Bài 35 Hàng cây
Trong khu vườn, người ta trồng một hàng cây chạy dài gồm có N cây, mỗi cây
có độ cao là ai, a2, aN
Người ta cần lấy M mét gỗ bằng cách đặt cưa máy sao cho lưỡi cưa ở độ cao H (mét) để cưa tất cả các cây có độ cao lớn hơn H (dĩ nhiên những cây có độ cao không lớn hơn H thì không bị cưa)
Ví dụ: Nếu hàng cây có các cây với độ cao tương ứng là 20; 15; 10 và 18 mét, cần lấy 7 mét gỗ Lưỡi cưa đặt tại độ cao hợp lí là 15 mét thì độ cao của các cây còn lại sau khi bị cưa tương ứng là 15; 15; 10 và 15 mét Tổng số mét gỗ lấy được là 8 mét (dư 1 mét)
Yêu cầu: Hãy tìm vị trí đặt lưỡi cưa hợp lí (số nguyên H lớn nhất) sao cho lấy
được M mét gỗ và số mét gỗ dư ra là ít nhất
Dữ liệu: Vào từ file văn bản wood.inp
Trang 33Kết quả: Ghi ra file văn bản wood.out
Một số nguyên cho biết giá trị cần tìm
có độ dài nguyên Có thể không cần cắt hết các đoạn dây đã cho
Mỗi đoạn dây bị cắt có thể có phần còn thừa khác 0 Yêu cầu: Xác định độ dài lớn nhất của đoạn dây có thể nhận được Nếu không có cách cắt thì đưa ra số 0
Dữ liệu: Vào từ file văn bản Wires.inp
- Dòng đầu tiên chứa hai số nguyên N, K
- Dòng thứ i trong N dòng tiếp theo chứa số nguyên ai
Kết quả: Ghi ra file văn bản Wires.out
Một dòng duy nhất ghi độ dài lớn nhất có thể nhận được
- 1 ≤ i < j ≤ N
Trang 3434
- Aj – Ai ≥ P
- j – i lớn nhất
Khi đó j – i được gọi là độ dài bước nhảy xa nhất của dãy
Yêu cầu: Tìm độ dài bước nhảy xa nhất của dãy A
Dữ liệu: Vào từ file văn bản Jump.inp
- Dòng 1: Gồm hai số nguyên N và P (1 ≤ N ≤ 105; 0 ≤ P ≤ 109)
- Dòng 2: Gồm N số nguyên A1, A2,…, AN (0 ≤ Ai ≤ 109 với 1 ≤ i ≤ N)
(Các số cách nhau ít nhất 1 dấu cách)
Kết quả: Ghi ra file văn bản Jump.out
Gồm một số nguyên dương duy nhất là độ dài của bước nhảy xa nhất của dãy (Nếu không có bước nhảy nào thỏa mãn thì ghi kết quả bằng 0)
Dữ liệu: Vào từ file văn bản seq.inp
- Dòng đầu chứa 3 số nguyên 𝑛, 𝐿, 𝑅 (0 < 𝑛 ≤ 105; 0 ≤ 𝐿 ≤ 𝑅 ≤ 109)
- Dòng thứ hai gồm 𝑛 số nguyên 𝑎1, 𝑎2, , 𝑎𝑛 (|𝑎𝑖| ≤ 109)
Hai số liên tiếp trên một dòng cách nhau một dấu cách
Kết quả: Ghi ra file văn bản seq.out
Gồm một dòng chứa một số là số cặp chỉ số (𝑖, 𝑗) đếm được
Trang 3535
Bài 39 Cho thuê máy
Công ty X có một máy tính chuyên dụng để cho thuê thực hiện các công việc của khách hàng Nếu thời gian cho thuê càng lớn thì công ty thu về càng nhiều tiền Công ty X làm ăn uy tín nên luôn biết trước số lượng đơn đặt hàng khách hàng mỗi
kỳ, mỗi công việc cần thực hiện từ thời điểm l đến thời điểm r thì kết thúc Tại một thời điểm nào đó máy tính chỉ thực hiện được một công việc, thời gian để chuyển sang công việc tiếp theo coi như không đáng kể tức một công việc nào đó kết thúc ở thời điểm t, thì t có thể là thời điểm bắt đầu của một công việc khác
Yêu cầu: Hãy giúp công ty X chọn ra các công việc để tổng thời gian máy tính thực hiện là lớn nhất
Dữ liệu: Vào từ file văn bản Max.inp
- Dòng đầu chứa một số nguyên dương n, là số lượng công việc
- N dòng tiếp theo chứa 2 số nguyên l và r (0 ≤ l ≤ r ≤ 109), mô tả một công việc bắt đầu tại thời điểm l và kết thúc tại thời điểm r
Kết quả: Ghi ra file văn bản Max.out
Gồm một số duy nhất là tổng thời gian lớn nhất mà máy tính thực hiện
nó được chuyển sang phân xưởng vẽ để vẽ các hoa văn lên sản phẩm trước khi nung
Do hai phân xưởng này ở cách xa nhau nên trong một ngày tất cả đồ gốm sản xuất trong ngày chỉ được vận chuyển một lần duy nhất từ phân xưởng nặn sang phân xưởng vẽ bằng một ô tô chuyên dụng May mắn là nó chạy rất nhanh nên thời gian
Trang 3636
vận chuyển xem như bằng 0 Sau khi hoàn thành vẽ xong, toàn bộ sản phẩm sẽ ngay lập tức đem đi nung
Phân xưởng nặn có N thợ thủ công, thợ thủ công thứ i nặn một sản phẩm mất
ai đơn vị thời gian Phân xưởng vẽ có M thợ thủ công, thợ thủ công thứ j hoàn thành
vẽ hoa văn lên một sản phẩm mất bi đơn vị thời gian
Ngày làm việc kéo dài T đơn vị thời gian và khi bắt đầu cả trong phân xưởng nặn và vẽ không có sản phẩm nào Ngoài ra, sau khi kết thúc ngày làm việc trong cả hai phân xưởng này cũng không còn sản phẩm nào (tức là tất cả các sản phẩm đã hoàn thành cả hai phần việc nặn và vẽ)
Hỏi rằng số lượng sản phẩm tối đa mà hai phân xưởng sản xuất trong ngày là bao nhiêu?
Dữ liệu: Vào từ file văn bản pottery.inp
- Dòng đầu tiên ghi số nguyên dương T (1≤T≤109)
- Dòng thứ hai ghi số nguyên dương N (1≤N≤100000)
- Dòng thứ ba ghi N số nguyên dương a1, a2, , an (ai ≤109)
- Dòng thứ tư ghi số nguyên dương M (1≤M≤100000)
- Dòng thứ năm ghi M số nguyên dương b1, b2, , bm (bj ≤109)
Kết quả: Ghi ra file văn bản pottery.out
Một số nguyên duy nhất là số lượng sản phẩm tối đa có thể hoàn thành trong ngày của hai phân xưởng
Dữ liệu: Vào từ file văn bản Dondieutang.inp
Dòng đầu là số N, dòng thứ 2 gồm N số nguyên
Trang 3737
Kết quả: Ghi ra file văn bản Dondieutang.out
Gồm 1 số là độ dài dãy con dài nhất tìm được
Bài 42 Tìm dãy con không âm
Cho dãy A gồm 10000 số nguyên, tìm dãy con liên tục dài nhất của dãy sao cho
không có số âm nào trong dãy Nếu không tìm được dãy con thoã mãn in ra số -1
Dữ liệu: Vào từ file văn bản khongam.inp
Dòng đầu là số N, dòng thứ 2 gồm N số nguyên
Kết quả: Ghi ra file văn bản khongam.out
Gồm 1 số là độ dài dãy con dài nhất tìm được
Bài 43 Tìm dãy con có các phần tử bằng nhau
Cho dãy A gồm n số nguyên (n <=10000), tìm dãy con liên tục dài nhất bằng
nhau trong dãy
Dữ liệu: Vào từ file văn bản Daybang.inp
Dòng đầu là số N, dòng thứ 2 gồm N số nguyên
Kết quả: Ghi ra file văn bản Daybang.out
Gồm 1 số là độ dài dãy con dài nhất tìm được
Trang 3838
Bài 44 Tìm dãy con đan dấu
Cho dãy A gồm n số nguyên (n <=10000), tìm dãy con liên tục dài nhất đan
dấu trong dãy
Dữ liệu: Vào từ file văn bản Daydandau.inp
Dòng đầu là số N, dòng thứ 2 gồm N số nguyên
Kết quả: Ghi ra file văn bản Daydandau.out
Gồm 1 số là độ dài dãy con dài nhất tìm được
Bài 45 Tìm dãy con có các phần tử chia hết cho k
Một cửa hàng kẹo sản xuất ra n thùng kẹo đặt thẳng hàng trên băng Mỗi thùng kẹo đánh kí hiệu 1, 2, , n Mỗi thùng kẹo có lần lượt a1,a2, ,an kẹo (0<ai<105).Nhưng cửa hàng chỉ có k cái bao cho mỗi thùng và việc phân chia được làm tự động
Là 1 nhân viên trong Cửa hàng, bạn hãy giúp người quản lý bằng cách lập chương trình tìm dãy thùng dài nhất mà mỗi thùng sau khi chia có số kẹo trong bao bằng nhau (Số kẹo chia hết cho k)
Dữ liệu: Vào từ file văn bản Thungkeo.inp
- Dòng đầu chứa 2 số nguyên n, k (1 < k < 105; n < 104)
- Các dòng sau: chứa các số nguyên ai, các số cách nhau ít nhất một dấu cách
Kết quả: Ghi ra file văn bản Thungkeo.out
Chứa dãy thùng dài nhất
Bài toán 46 Tìm dãy con có giá trị trung bình lớn nhất
Cho dãy số nguyên A[1], A[2], , A[N] Tìm dãy con liên tiếp Á[L+1],… A[R]
(1< L < R < N) trong dãy đã cho mà có giá trị trung bình lớn nhất
Giá trị trung bình của dãy con A[L], A[L + 1], , A[R] được tính bằng công
thức sau đây:
Trang 3939
A[L] + A[L + 1] + + A[R])
R- L + 1
Yêu cầu: Nếu có nhiều dãy con như vậy thì hãy tìm dãy dài nhất
Dữ liệu: Vào từ file văn bản Daytrungbinh.inp
- Dòng đầu tiên chứa số nguyên N là số phần tử của dãy A
- Dòng thứ hai chứa N số nguyên cách nhau một dấu cách A[1], A[2], , A[N]
là các phần tử của dãy A
Ràng buộc
1 < N< 10 5 ; 0 < A[i] < l09, i = 1…N
Kết quả: Ghi ra file văn bản Daytrungbinh.out
Một số nguyên là số phần tử của dãy con liên tiếp dài nhất và có giá trị trung bình lớn nhất có thể
Dãy con liên tiếp dài nhất có giá trị trung bình lớn nhất trong dãy đã cho là dãy
|(6,6) gồm 2 phần tử và cỏ giá trị trung bình bằng (6 + 6)/(4-3+1) = 6
Bài toán 47 Tìm dãy con có tổng max
Cho dãy A gồm n số nguyên, một đoạn con của dãy A là một dãy con gồm các phần tử liên tiếp của dãy A Hãy tìm đoạn con dài nhất của dãy A có tổng các giá trị lớn nhất
Dữ liệu: Vào từ file văn bản tongmax.inp
- Dòng đầu tiên chứa số nguyên N là số phần tử của dãy A
- Dòng thứ hai chứa N số nguyên cách nhau một dấu cách A[1], A[2], , A[N]
là các phần tử của dãy A
Ràng buộc
1 < N< 10 5 ; A[i] < l09, i = 1…N
Kết quả: Ghi ra file văn bản tongmax.out
Một số nguyên là số phần tử của dãy con liên tiếp dài nhất và có tổng các giá trị lớn nhất
Trang 40Bài 48 Tìm dãy con nguyên tố
Cho dãy A gồm 10000 số nguyên, tìm dãy con liên tục dài nhất của dãy gồm
các số nguyên tố
Dữ liệu: Vào từ file văn bản Doannt.inp
- Dòng đầu là số N
- Dòng thứ 2 gồm N số nguyên
Kết quả: Ghi ra file văn bản Doannt.out
Gồm 1 số là độ dài dãy con dài nhất tìm được
Nếu không tìm được dãy con thoã mãn in ra số -1
Bài 49 Hai giá trị
Cho dãy số nguyên 𝑎1, 𝑎2, … , 𝑎𝑁 Tìm độ dài đoạn con dài nhất gồm các phần tử liên tiếp của dãy chỉ bao gồm hai giá trị khác nhau
Ví dụ dãy 1, 3, 2, 3, 3, 1, 2 thì đoạn con dài nhất cần tìm là 3, 2, 3, 3 độ dài 4 gồm hai giá trị là 2 và 3
Dữ liệu: Vào từ file văn bản Twovals.inp
- Dòng đầu tiên ghi số nguyên 𝑁 (1 ≤ 𝑁 ≤ 106);
- Dòng thứ hai ghi 𝑁 số nguyên 𝑎1, 𝑎2, … , 𝑎𝑁(1 ≤ 𝑎𝑖 ≤ 109)
Kết quả: Ghi ra file văn bản Twovals.out
Một số nguyên duy nhất là độ dài đoạn con dài nhất chỉ bao gồm hai giá trị khác nhau theo phương án tìm được
Ví dụ: