1. Trang chủ
  2. » Giáo Dục - Đào Tạo

CHUYÊN ĐỀ BỒI DƯỠNG HSG TIN HỌC THUẬT TOÁN SẮP XẾP VÀ TÌM KIẾM

40 1,3K 7
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 523,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Là tài liệu được trình bày từ cơ bản đến nâng cao về ứng dụng sắp xếp và tìm kiếm trong việc giải các bài toán thi học sinh giỏi Tin học. Có các bài tập minh họa và hướng dẫn cách giải từ đề thi HSG tỉnh, Quốc gia các năm

Trang 1

CHUYÊN ĐỀ 3 TÌM KIẾM SẮP XẾP

1 Thuật toán tìm nhị phân trên mảng

- Thuật toán tìm kiếm nhị phân có thể tìm phần tử có giá trị bằng X trên mảng đã đượcsắp xếp một cách hiệu quả trong thời gian O(logn) Thuật toán như sau:

- Giả sử cần tìm trong đoạn a[L], a[L + 1],.a[H] với giá trị cần tìm kiếm là X, trước hết taxem xét với giá trị của phần tử nằm giữa dãy, mid = (L + H) div 2

+Nếu a[mid] < X thì có nghĩa là đoạn từ a[L] tới a[mid] chỉ chứa các phần tử có giá trị <

X, ta tiến hành tìm kiếm tiếp với đoạn từ a[mid + 1] đến a[H]

+Nếu a[mid] > X thì có nghĩa là đoạn từ a[mid] tới a[H] chỉ chứa các phần tử có giá trị >

X, ta tiến hành tìm kiếm tiếp với đoạn từ a[L] đến a[mid -1]

+ Nếu a[mid] = X thì việc tìm kiếm thành công (kết thúc quá trình tìm kiếm)

- Quá trình tìm kiếm sẽ thất bại nếu đến một bước nào đó, đoạn tìm kiếm là rỗng

Khi đó (L>H) Hàm được viết như sau :

if (x<a[tam]) then c:=tam-1;

if (x>a[tam]) then d:=tam+1;

end;

end;

Trang 2

2 Thuật toán sắp xếp nhanh trên mảng :

- Ý tưởng của thuật toán như sau: Để sắp xếp dãy coi như là sắp xếp đoạn từ chỉ số 1 đếnchỉ số n Để sắp xếp một đoạn trong dãy, nếu đoạn chỉ có một phần tử thì dãy đã được sắpxếp, ngược lại ta chọn một phần tử X trong đoạn đó làm "chốt", mọi phần tử có khoá nhỏhơn khoá của “chốt” được xếp vào vị trí đứng trước chốt, mọi phần tử có khoá lớn hơnkhoá của “chốt” được xếp vào vị trí đứng sau chốt Sau phép hoán chuyển như vậy thìđoạn đang xét được chia làm hai đoạn mà mọi phần tử trong đoạn đầu đều có khoá < khoácủa “chốt” và mọi phần tử trong đoạn sau đều có khoá > khoá của “chốt” Tiếp tục sắpxếp kiểu như vậy với 2 đoạn con, ta sẽ được đoạn đã cho được sắp xếp theo chiều tăngdần của khoá

Procedure qsort(d,c:longint; var e:mang);

if(d<j) then qsort(d,j,e);

if(i<c) then qsort(i,c,e);

end;

Trang 3

3 Một số kỹ thuật khác

a Kỹ thuật đếm phân phối

- Trong trường hợp các phần tử a[1],a[2] , ,a[n] là các số nguyên nằm trong khoảng từ -ktới k (|k|≤106) ta có thuật toán đếm số lần xuất hiện của các giá trị từ -k tới k như sau:Xây dựng dãy c[-k],…,c[0], c[1], , c[k] , trong đó c[v] là số lần xuất hiện v trong dãy

For v:= -k to k do c[v]:=0;

For i:=1 to n do c[a[i]]:=c[a[i]] + 1;

b Kỹ thuật tìm các bộ hai (ai,aj) của dãy số thỏa điều kiện

- Nếu điều kiện là i≠j thì ta có tất cả là n*(n-1)/2 cặp

For j:=i+1 to n do <Câu lệnh>

- Nếu điều kiện là i, j bất kỳ thì ta có tất cả là n*n cặp

- Tuy nhiên tùy theo tính chất của từng bộ ta có thể dùng kĩ thuật đếm hoặc sắp xếp hoặcduyệt từ hai phía, tìm kiếm nhị phân…

c Kỹ thuật về dãy con, đoạn con của một dãy số

Đoạn con: Là tập hợp các phần tử liên tiếp của dãy số Số đoạn con của một dãy là

n*(n+1)/2 đoạn

Ví dụ dãy số có 5 phần tử : 3 7 5 9 8

i = 1 → đoạn con bắt đầu bằng a1 có 5 đoạn (3), (3,7), (3,7,5), (3,7,5,9), (3,7,5,9,8)

i = 2 → đoạn con bắt đầu bằng a2 có 4 đoạn (7), (7,5), (7,5,9), (7,5,9,8)

i = 3 → đoạn con bắt đầu bằng a3 có 3 đoạn (5), (5,9), (5,9,8)

i = 4 → đoạn con bắt đầu bằng a4 có 2 đoạn (9), (9,8)

Trang 4

i = 5 → đoạn con bắt đầu bằng a5 có 1 đoạn (8)

Tổng cộng có : 1 + 2 + 3 + 4 + 5 = 5*(5+1)/2 = 15 đoạn con

Ta có thể dùng hai lồng nhau để duyệt hết các đoạn con với độ phức tạp O(n2)

For i:=1 to n do

For j:=i to n do <Câu lệnh>

- Cách tính trọng lượng dãy (tổng các phần tử của dãy) : Gọi F[i] là trọng lượng của dãy

xét từ 1 i được tính theo công thức : F[i] = F[i-1] + a[i];

F[1]:=a[1];

For i:=2 to n do F[i]:=F[i-1]+a[i];

Như vậy F[j] – F[i] = Sum(F[i+1], F[i+2],…,F[j]) Với i < j

- Cách tính tổng toàn bộ các đoạn con con liên tiếp

Dãy con: Là tập hợp các phần tử không liên tiếp của dãy số Số dãy con của dãy là 2n

Ví dụ dãy số có 3 phần tử : 3 7 5 sẽ có 23 = 8 dãy con

i = 0 → dãy con có 0 phần tử có 1 dãy (∅)

i = 1 → dãy con có 1 phần tử có 3 dãy (3), (7), (5)

i = 2 → dãy con có 2 phần tử có 3 dãy (3,7), (3,5), (7,5)

i = 3 → dãy con có 3 phần tử có 1 dãy (3,7,5)

- Ta thường dùng dãy nhị phân tương ứng để biểu diễn các dãy con Ví dụ với dãy trên : Dãy nhị phân : (0 0 0) ↔ (∅); (0 0 1) ↔ (5); (0 1 0) ↔ (7);

(0 1 1) ↔ (7,5); (1 0 0) ↔ (3); (1 0 1) ↔ (3,5);

Trang 5

(1 1 0) ↔ (3,7); (1 1 1) ↔ (3,7,5);

Trang 6

BÀI TẬP CHƯƠNG III Bài 1: Tìm giá trị lớn nhất Tên file chương trình ‘MAXN.???’

Cho n số nguyên al, a2, an

Yêu cầu: Tìm giá trị lớn nhất trong n số đó.

Dữ liệu vào từ file ‘MAXN.INP’

■ Dòng đầu là số nguyên dương n (n<106)

■ n dòng tiếp theo, dòng thứ i là số nguyên ai (|ai|<1018)

Kết quả ghi vào file ‘MAXN.OUT’ kết quả tìm được.

Ví dụ:

27

Cho một dãy số nguyên ai, a2, an

Yêu cầu: Hãy tìm số âm lớn nhất trong dãy trên.

Dữ liệu vào từ file ‘NEGAMAX.INP’:

■ Dòng đầu là số nguyên dương n (n<106)

■ Dòng thứ 2 là các phần tử của dãy (phạm vi mỗi phần tử từ -2*109 đến 2*109)

Kết quả ghi vào file ‘NEGAMAX.OUT’ số âm lớn nhất tìm được.

Yêu cầu: Tính tổng của n số đó.

Dữ liệu vào từ file ‘SUMARR.INP’

■ Dòng đầu là số nguyên dương n (n<106)

■ n dòng tiếp theo, dòng thứ i là số nguyên ai (|ai|<109)

Kết quả ghi vào file ‘SUMARR.OUT’ kết quả tìm được.

Trang 7

Ví dụ:

21

Cho n số nguyên a1, a2, an

Yêu cầu: Tính trung bình cộng của các số nguyên dương trong n số đó.

Dữ liệu vào từ file ‘AVER.INP’

■ Dòng đầu là số nguyên dương n (n<106)

■ n dòng tiếp theo, dòng thứ i là số nguyên ai (|ai|<109)

Kết quả ghi vào file ‘AVER.OUT’ kết quả tìm được (lấy 2 chữ số phần thập phân).

Ví dụ:

2-73

Trên mặt phẳng tọa độ, cho n điểm có tọa độ nguyên: Ai(xi, yi), A2(x2, y2), An(xn, yn)

Yêu cầu: Hãy tìm hình chữ nhật có các cạnh song song với hệ trục tọa độ có diện tích

nhỏ nhất bao n điểm đó (điểm có thể nằm trên cạnh của hình chữ nhật tìm được)

Dữ liệu vào từ file ‘RECT.INP’:

■ Dòng đầu là số nguyên dương n (n<106)

■ n dòng tiếp theo mỗi dòng là 2 số nguyên tương ứng là hoành độ và tung độ của mộtđiểm (phạm vi mỗi số từ -109 đến 109)

Kết quả ghi vào file ‘RECT.OUT’ thông tin của hình chữ nhật tìm được gồm 2 dòng:

Dòng đầu là 2 số nguyên tương ứng là hoành độ và tung độ của đỉnh góc trái dưới Có

tọa độ góc trái dưới và phải trên lần lượt là (-2,-2) và (3,1)

■ Dòng thứ hai là 2 số nguyên tương ứng là hoành độ và tung độ của đỉnh góc phải trên

Trang 8

Bài 6: Diện tích hình chữ nhật Tên file chương trình ‘SRECT.???’

Trong mặt phẳng tọa độ Oxy cho n điểm, điểm thứ i có tọa độ (xj, yj)

Yêu cầu: Hãy tính diện tích hình chữ nhật nhỏ nhất có các cạnh song song với 2 trục tọa

độ bao cả n điểm đã cho Các điểm đã cho có thể nằm trên cạnh của hình chữ nhật

Dữ liệu vào từ file ‘SRECT.INP’

■ Dòng đầu chứa số nguyên dương n (n<105)

■ n dòng tiếp theo mỗi dòng là 2 số nguyên tương ứng là hoành độ và tung độ của mộtđiểm (phạm vi mỗi số từ -109 đến 109)

Kết quả ghi vào file ‘SRECT.OUT’ diện tích hình chữ nhật tìm được.

Bài 7 Đoạn số nguyên Tên file chương trình ‘SEGINT.???’

Cho n đoạn số nguyên được đánh số từ 1 n

Yêu cầu: Hãy cho biết tất cả các số xuất hiện ở cả n đoạn

Dữ liệu vào từ file ‘SEGINT.INP’

■ Dòng đầu chứa số nguyên dương n (n<105)

■ n dòng tiếp theo mỗi dòng là 2 số nguyên tương ứng là điểm đầu và điểm cuối của mộtđoạn (phạm vi mỗi số từ -109 đến 109)

Trang 9

Kết quả ghi vào file ‘SEGINT.OUT’ các số tìm được theo thứ tự tăng dần.

Nếu không tìm được ghi -1

Bài 8 Hệ trục tọa độ Tên file chương trình ‘COORDSYS.???’

Trên trục số x’Ox cho n điểm nguyên (có hoành độ nguyên) Gọi các điểm nguyên đó lần lượt có giá trị (hoành độ) là a1, a2, an

Yêu cầu: Hãy cho biết phải dùng ít nhất bao nhiêu đơn vị độ dài trên x’Ox Ví dụ:

Dữ liệu vào từ file ‘COORDSYS.INP’

■ Dòng đầu chứa số nguyên dương n (n<105)

■ n dòng tiếp theo mỗi dòng là 2 số nguyên tương ứng là điểm đầu và điểm cuối của mộtđoạn (phạm vi mỗi số từ -109 đến 109)

Kết quả ghi vào file ‘COORDSYS.OUT’ các số tìm được theo thứ tự tăng dần

Cho n số nguyên gồm n phần tử a1, a2, an Người ta chọn trong dãy số trên ra hai phần tử

ai và aj (i=1, 2, n; j=1, 2, n; ij ) Gọi T=ai*aj

Yêu cầu: Hãy cho biết giá trị lớn nhất của T.

Ví dụ: Dãy số a là 3 2-4 7 thì chọn ra 2 phần tử là 3 và 7 thì được tích là 21 (lớn nhất)

Trang 10

Dữ liệu vào từ file ‘MULMAX.INP’ có nội dung như sau:

■ Dòng đầu là số nguyên dương n (n<105)

■ Trong n dòng sau, dòng thứ i là số nguyên ai (i=1, 2,… n; |ai|<109)

Kết quả ghi vào file ‘MULMAX.OUT’: một số nguyên duy nhất là giá trị lớn nhất của T.

Ví dụ:

32-47

Bài 10: Tích lớn nhất trong 3 số Tên file chương trình ‘MULMAX3.???’

Cho một dãy số nguyên a1, a2,…, an

Yêu cầu: Hãy chọn ra 3 số trong dãy trên sao cho tích của chúng là lớn nhất

Dữ liệu vào từ file ‘MULMAX3 INP’

■ Dòng đầu là số nguyên dương n (n<105)

■ Dòng thứ 2 chứa dãy số a1, a2, , an (i=1, 2,… n; |ai|<109)

Kết quả ghi vào file ‘MULMAX3.OUT’ ghi tích lớn nhất tìm được.

Ví dụ:

6

Để tập cho các cháu mẫu giáo làm quen với số và các khái niệm “lớn hơn", “bé hơn” cô

giáo chuẩn bị n hộp giấy, bên ngoài hộp giấy thứ i ghi số nguyên ai Các số ghi ngoài hộp

khác nhau từng đôi một Các hộp được bỏ vào một túi ni lông to sẫm màu để không đọcđược số từ bên ngoài Đến giờ học toán cô giáo cho các em lần lượt lên bàn cô, mỗi emlấy ra hai hộp, sau đó bỏ lại vào túi hộp có số nhỏ hơn và giữ cho mình hộp kia Lớp học

có tất cả n-1 em Đứng quan sát, cô giáo rất hài lòng là không em nào bỏ sai hộp trở lạivào túi Sau khi cả lớp đã lấy xong hộp của mình cô giáo đi phát phần thưởng cho các

em, mỗi em nhận được số viên kẹo đúng bằng số ghi ở hộp mà các em có

Trang 11

Phụ huynh học sinh cũng rất thích thú với phương pháp giảng dạy sinh động này Tuy vậy

có người lo lắng, lỡ thiếu kẹo phát cho những học sinh cuối cùng thì sao? Cô giáo chobiết là bao giờ cũng phải chuẩn bị đủ số kẹo phát cho các cháu, không thừa và khôngthiếu lấy một viên!

Yêu cầu: Cho n và các số ai (1 < ai < 32767, i = 1 - n, 1 < n < 105) Hãy xác định số kẹo

cô giáo cần chuẩn bị

Dữ liệu vào từ file văn bản PRIZE.INP:

■ Dòng đầu tiên chứa số nguyên n,

■ N dòng sau chứa các số nguyên a1, a2, , an

Kết quả đưa ra file văn bản PRIZE.OUT một số nguyên - số kẹo cần chuẩn bị.

Bài 12: Giao hai dãy số Tên file chương trình ‘DAYSO2.???’

Cho 2 dãy số nguyên x1, x2, ….xn và y1, y2, ….yn tăng nghiêm ngặt

Yêu cầu: Hãy đếm số lượng các phần tử của x xuất hiện trong y.

Dữ liệu vào từ tập tin văn bản DAYSO2.INP, gồm:

Trang 12

Bài 13: Giá trị lớn nhất Tên file chương trình ‘GETMAX.???’

Cho dãy số nguyên a1, a2, an các phần tử đôi một khác nhau

Yêu cầu: Hãy tìm giá trị lớn nhất của dãy số đó sao cho giá trị lớn nhất đó phải thuộc tập

số nguyên: b1, b2, bm

Dữ liệu vào từ file ‘GETMAX.INP’:

■ Dòng thứ nhất chứa lần lượt các số nguyên dương n, m (n, m<105)

■ Trong n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|ai|<2*109; i=1,2, n) a

■ Trong m dòng cuối, dòng thứ j chứa số nguyên bj (|bj|<2*109; j=1,2,…m)

Kết quả ghi vào file ‘GETMAX.OUT’ giá trị lớn nhất thỏa điều kiện trên.

Bài 14: Sản xuất thiết bị Tên file chương trình ‘MANUEQUI.???’

Trong quy trình sản xuất các thiết bị của một nhà máy có sử dụng hai máy A và B, máy A

sản xuất ra n linh kiện (gọi tắt là linh kiện a) có thông số kỹ thuật a1, a2, an và máy B

sản xuất ra m linh kiện (gọi tắt là linh kiện b) có thông số kỹ thuật b1, b2, bm Một thiết

bị được tạo ra là sự kết hợp của một linh kiện a và một linh b và phải đảm bảo có tổng thông số kỹ thuật là S Giả thiết rằng các linh kiện do mỗi máy tạo ra đều có thông số kỹ

thuật khác nhau đôi một Thông số kỹ thuật của một linh kiện có thể là số âm

Yêu cầu: Hãy cho biết với quy trình sản xuất như vậy có bao nhiêu thiết bị được tạo ra?

Dữ liệu vào từ file ‘MANUEQUI.INP’:

■ Dòng thứ nhất chứa nguyên dương n, m và số nguyên S (n, m<105; |S|<2*109)

■ Trong n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|aị|<2* 109; i=1,2, n)

■ Trong m dòng cuối, dòng thứ j chứa số nguyên bj (|bj|<2*109; j=1,2, m)

Kết quả ghi vào file ‘MANUEQUI.OUT’ số lượng thiết bị được tạo ra.

Trang 13

Ví dụ:

1324201

Bài 15: Độ lớn của dãy số Tên file chương trình ‘MINMAX.???’

Cho dãy số nguyên a1, a2, an Người ta tìm độ lớn của dãy số thông qua cặp số ai và aj

(với i=1,2, n; j=1,2, n; i≠j) Tuy nhiên, để đảm bảo độ lớn không có giá trị âm người taxác định độ lớn của dãy số bằng phép tính |ai+aj|

Yêu cầu: Với n số nguyên a1, a2, an Hãy cho biết dãy số có độ lớn trong phạm vi nào?

Dữ liệu vào từ file ‘MINMAX.INP’:

■ Dòng thứ nhất chứa số nguyên dương n(n<106)

■ Trong n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|ai|<2*109; i=1,2, n)

Kết quả ghi vào file ‘MINMAX.OUT’: a

■ Dòng đầu ghi độ lớn nhỏ nhất của dãy số

■ Dòng thứ hai ghi độ lớn lớn nhất của dãy số

Cho một dãy số nguyên a1, a2, an các phần tử đôi một khác nhau

Yêu cầu: Với số nguyên S cho trước, hãy cho biết có bao nhiêu cặp số (ai, aj) thỏa mãn

ai+aj=S (với i≠j) Biết rằng cặp số (ai, aj) và (aj, ai) chỉ tính là một

Trang 14

Ví dụ: có dãy số 3 2 5 4 1 và S=6 thì có 2 cặp số (2,4) và (5,1) thỏa điều kiện.

Dữ liệu vào từ file ‘SUM2ELE.INP’

■ Dòng đầu là số nguyên dương n và số nguyên S (n<105, |S|<1018)

■ n dòng tiếp theo, dòng thứ i là phần tử ai (|ai|<109; i=1, 2, n)

Kết quả ghi vào file ‘SUM2ELE.OUT’ số cặp số thỏa mãn điều kiện.

Theo quan niệm của người Á đông cổ, mỗi cá nhân khi sinh ra đều ứng với một ngôi sao,được gọi là sao chiếu mệnh Các hoạt động của cá nhân đều bị chi phối bởi ngôi sao này,

kể cả quá trình kết bạn - hẹn hò Theo thuyết Âm dương - Ngũ hành, hai người chỉ có thểtạo lập mối quan hệ bền vững khi các sao chiếu mệnh của họ không có các thuộc tínhtương khắc Qua hàng ngàn năm quan sát và chiêm nghiệm, các chiêm tinh gia đã ghinhân được hầu hết các tính chất tương sinh - tương khắc của sao: mỗi sao, ngoài một mã

số để nhân diện còn có một giá trị thể hiện khả năng thích nghi của sao gọi là độ thíchnghi Thông qua độ thích nghi, người ta tính khả năng tương hợp của các sao Khả năngtương hợp của 2 sao được tính bằng tổng 2 độ thích nghi của chúng

Yêu cầu: cho n và dãy s1,s2, ,sn là độ thích nghi của các sao Hãy xác định số lượng Tcác cặp sao có khả năng tương hợp bằng B Hai cặp (Si, Sj) và (Sj, Si) được tính là 1

Ví dụ trong 5 sao với mã số 3, 5, 6, 5, 3 có 4 cặp có khả năng tương hợp là 8

Dữ liệu vào từ tập tin văn bản FRIEND.INP

- Dòng đầu tiên ghi 2 số nguyên n, B (2 < n < 105)

- Mỗi dòng trong n dòng tiếp theo ghi một số nguyên là độ thích nghi của một sao,

độ thích nghi có trị tuyệt đối bé hơn 215

Kết quả xuất ra tập tin văn bản FRIEND.OUT là số nguyên T tìm được

Trang 15

Ví dụ:

5 835653

4

Bài 18: Cặp trung bình Tên file chương trình ‘SUMAVER.???’

Cho một dãy số nguyên a có N phần tử và một số nguyên k

Yêu cầu: Hãy xác định xem trong dãy a có bao nhiêu cặp số (ai, aj) thỏa mãn k là trung bình cộng của ai và aj (với i≠j) Biết rằng cặp số (ai, aj) và (aj, ai) chỉ tính là một

Ví dụ: có dãy số 3 2 5 4 1 và k=4 thì có 1 cặp số (3, 5) thỏa điều kiện

Dữ liệu vào từ file ‘SUMAVER.INP’

■ Dòng đầu là số nguyên dương n và số nguyên k (n<105, |S|<1018)

■ n dòng tiếp theo, dòng thứ i là phần tử ai (|ai|<109; i=1, 2, n)

Kết quả ghi vào file ‘SUMAVER.OUT’ số cặp số thỏa mãn điều kiện.

Cho dãy số nguyên gồm n phần tử a1, a2, an Người ta chọn trong dãy ra 2 phần tử ai và aj

(i=1, 2,….n; j=1, 2,…n) sao cho i<j để tạo thành một cặp số (ai, aj)

Yêu cầu: Cho biết trong dãy có bao nhiêu cặp số (như trên) có tổng là một số chẵn.

Ví dụ: Dãy số có 5 phần tử là 8 3 5 4 7

Có các cặp số

(8, 3); (8, 5); (8, 4); (8, 7); (3, 5); (3, 4); (3, 7); (5, 4); (5, 7); (4, 7)

Có các cặp số (8, 4); (3, 5); (3, 7); (5, 7) có tổng phần tử là một số chẵn

Trang 16

Dữ liệu vào từ file ‘SUMEVEN.INP’:

■ Dòng đầu chứa số nguyên dương n (n<106)

■ n dòng tiếp theo, dòng thứ i là phần tử ai (i=1, 2,… n; |ai|<1018)

Kết quả ghi vào file ‘SUMEVEN.OUT' số lượng cặp số có tổng là số chẵn.

Ví dụ:

83547

Bài 20: Cặp số có tổng lẻ Tên file chương trình ‘SUMODD.???’

Cho một dãy số gồm n số nguyên a1, a2, an Biết rằng trong các số đó không có hai số bất

kì nào giống nhau Người ta chọn trong dãy ra 2 phần tử ai và aj với i=1, 2,…n;

j=1, 2,…n sao cho i<j để tạo thành một cặp số (ai, aj)

Yêu cầu: Hãy cho biết với cách chọn như trên thì có thể tạo ra bao nhiêu cặp số có tổng

ai+aj là một số lẻ

Ví dụ: Ta có các số 3 2 5 4

Sẽ tạo ra các cặp số (3, 2); (3, 5); (3, 4); (2, 5); (2, 4); (5, 4)

Tuy nhiên chỉ có 4 cặp số (3, 2); (3, 4); (2, 5); (5, 4) có tổng là một số lẻ

Dữ liệu vào từ file ‘SUMODD.INP':

■ Dòng thứ nhất chứa số nguyên dương n (n<106)

■ n dòng tiếp theo mỗi dòng chứa số nguyên ai (|ai|<109; i=1,2,…n)

Kết quả ghi vào file ‘SUMODD.OUT': một số nguyên duy nhất là số lượng cặp số thỏa

Trang 17

Bài 21: Cặp số trung hòa Tên file chương trình ‘NEUTRAL.???’

Cho 2 dãy số nguyên a1, a2 an và b1, b2, bm Một cặp số (ai,bj) được gọi là trung hòa nếu chúng thỏa mãn các điều kiện sau:

■ ai được chọn trong các số nguyên a1, a2 … an (i=1, 2,… n)

■ bj được chọn trong các số nguyên b1, b2,… bm (j=1, 2,…m)

■ ai*bj<0

Yêu cầu: Hãy cho biết có bao nhiêu cách chọn được cặp số trung hòa.

Ví dụ: Có 2 dãy số với các giá trị : Dãy a: 3 -2 0 5; Dãy b: 4 -1 3

Ta có thể chọn ra 4 cặp số trung hòa như sau: (3, -1); (5, -1); (-2, 4); (-2, 3)

Dữ liệu vào từ file ‘NEUTRAL.INP’

■ Dòng thứ nhất chứa số 2 nguyên dương n và m (n, m<105)

■ n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|ai|<109; i=1, 2, n)

■ m dòng cuối, dòng thứ j chứa số nguyên bj (|bj|<109; j=1, 2,… m)

Kết quả ghi vào file ‘NEUTRAL.OUT’ một số nguyên duy nhất là số cách chọn được cặp số trung hòa

4 33-2054-13

4

Cho một dãy số gồm n số nguyên a1, a2, an Biết rằng trong các số đó không có hai sốbất kì nào giống nhau Người ta chọn ra ba số bất kì trong đó để tạo ra một bộ số

(ai, aj, ak) với i=1, 2, n; j=1, 2, n; k=1, 2, n và i, j, k khác nhau đôi một

Yêu cầu: Hãy cho biết với cách chọn như trên thì có thể tạo ra bao nhiêu bộ số (ai, aj, ak)

có tổng ai+aj+ ak là một số lẻ

Trang 18

Ví dụ: Ta có các số 3 2 5 4

Sẽ tạo ra các bộ số (3, 2, 5); (3, 2, 4); (3, 5, 4); (2, 5, 4)

Tuy nhiên chỉ có 2 bộ số (3, 2, 4); (2, 5, 4) có tổng 3 số là một số lẻ

Dữ liệu vào từ file ‘SUMODD3.INP’:

■ Dòng thứ nhất chứa số nguyên dương n

■ n dòng tiếp theo, dòng thứ i chứa số nguyên ai (i=1, 2,.n)

Kết quả ghi vào file ‘SUMODD3.OUT’ một số nguyên duy nhất là số lượng bộ số thỏa

Bài 23: Đoạn con trung bình Tên file chương trình ‘AVESEQ.???’

Cho một dãy số nguyên a1, a2, an

Yêu cầu: tìm đoạn con dài nhất có giá trị trung bình lớn hơn giá trị k cho trước.

Dữ liệu vào từ file ‘AVESEQ.INP’

■ Dòng đầu ghi số nguyên dương n và số nguyên k

■ n dòng sau, mỗi dòng ghi một số nguyên ai (|ai|<10000)

Kết quả ghi vào file ‘AVESEQ.OUT’ độ dài lớn nhất của dãy con tìm được.

Trang 19

Bài 24: Đoạn con giống nhau Tên file chương trình ‘DOANSAME.???’

Cho một dãy số nguyên gồm n phần tử

Yêu cầu: Hãy tìm một đoạn liên tiếp các phần tử của dãy số có giá trị bằng nhau và có

nhiều phần tử nhất

Dữ liệu vào từ file ‘DOANSAME.INP’

■ Dòng đầu là số nguyên n (n<106)

■ Dòng thứ hai ghi n số của dãy (mỗi phần tử có giá trị từ -2*109 đến 2*109)

Kết quả ghi vào file ‘DOANSAME.OUT’ số lượng phần tử bằng nhau liên tiếp nhiều

Bài 25: Đoạn con tăng dài nhất Tên file chương trình ‘DOANCON1.???’

Cho một dãy số nguyên a1, a2, an

Yêu cầu: Hãy tìm đoạn con tăng dài nhất.

Dữ liệu vào từ file ‘DOANCON1.INP’:

■ Dòng đầu là số nguyên dương n (n<106)

■ Dòng thứ 2 là các phần tử của dãy (phạm vi mỗi phần tử từ -1018 đến 1018)

Kết quả ghi vào file ‘DOANCON1.OUT’ số lượng phần tử của đoạn tăng dài nhất.

Ví du:

3 2 5 6 4 9

Bài 26: Đoạn con có tổng lớn nhất Tên file chương trình ‘DOANCON2.???’

Cho một dãy số nguyên a1, a2, an

Yêu cầu: Hãy tìm đoạn con có tổng lớn nhất.

Dữ liệu vào từ file ‘DOANCON2.INP’:

■ Dòng đầu là số nguyên dương n (n<106)

■ Dòng thứ 2 là các phần tử của dãy (phạm vi mỗi phần tử từ -2*109 đến 2*109)

Trang 20

Kết quả ghi vào file ‘DOANCON2.OUT’ tổng lớn nhất tìm được.

Ví du:

3 -4 5 6-8 7

Bài 27: Đoạn có tổng bằng 0 Tên file chương trình ‘SUM0.???’

Cho dãy số nguyên a1, a2,… an

Yêu cầu: Hãy cho biết đoạn có tổng bằng 0 có nhiều nhất là bao nhiêu phần tử (các phần

tử này phải nằm liên tiếp nhau trong dãy)

Dữ liệu vào từ file ‘SUM0.INP’:

■ Dòng thứ nhất chứa số nguyên dương n (n<105)

■ n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|ai|<105; i=1, 2,…n)

Kết quả ghi vào file ‘SUM0.OUT’ một số nguyên duy nhất là số lượng phần tử.

Ví dụ :

76-1-54

Bài 28: Đếm đoạn có tổng bằng 0 Tên file chương trình ‘SUM0S.???’

Cho dãy số nguyên a1, a2,… an

Yêu cầu: Hãy cho biết đoạn có tổng bằng 0 có nhiều nhất là bao nhiêu phần tử (các phần

tử này phải nằm liên tiếp nhau trong dãy)

Dữ liệu vào từ file ‘SUM0S.INP’:

■ Dòng thứ nhất chứa số nguyên dương n (n<105)

■ n dòng tiếp theo, dòng thứ i chứa số nguyên ai (|ai|<105; i=1, 2,…n)

Kết quả ghi vào file ‘SUM0S.OUT’ một số nguyên duy nhất là số lượng phần tử.

Ngày đăng: 24/09/2019, 22:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w