You are on page 1of 3

Bài 1: SPLITARR.

* - Tách dãy
Cho dãy A gồm N phần tử được đánh số từ 0..N-1. Tìm cách tách A thành ba phần sao
cho tổng các phần tử trong ba phần là bằng nhau?

Input:

- Dòng đầu ghi số N (N<=10^6)


- Dòng tiếp theo ghi N số nguyên, các số cách nhau bởi dấu cách (Ai<=10^9)

Output:

- Kết quả gồm hai chỉ số i,j thỏa mãn 0<=i<j<=N sao cho i,j chia dãy thành 3
mảng con có tổng bằng nhau. Nếu không tồn tại cách chia, in ra -1

Ví dụ:

SPLITARR.INP SPLITARR.INP
5 12
13404
3 -1
234

Bài 2: Bộ ba số

Cho dãy N (1 <= N <= 105) số nguyên dương A1, A2, ..., AN (Ai <= 109).
Hãy tìm bộ ba số (i, j, k) trong đó 1 <= i < j < k <= N sao cho giá trị S = 2Ai –
3Aj + 5Ak đạt giá trị lớn nhất.
Dữ liệu vào từ file THREENUM.INP gồm:
- Dòng đầu tiên chứa số N
- Dòng thứ hai chứa N số nguyên dương A1, A2, ..., AN cách nhau bằng 1
dấu cách.
Kết quả ghi ra file THREENUM.OUT một số duy nhất là số S lớn nhất tìm
được.
Ví dụ:
THREENUM.INP THREENUM.OUT

7 39
3 5 2 6 4 5 7
* Chú ý: có 60% số test N <= 100
Bài 3. Bài 4: TỔNG X
Cho một dãy gồm n số nguyên a1, a2, ..., an, và một số nguyên x . Hãy viết chương
trình đếm xem có tất cả bao nhiêu cặp số (ai, aj) với 1≤ i < j ≤ n, sao cho ai + aj = x.

• Dữ liệu: Vào từ file văn bản SUMX.INP có cấu trúc như sau:
- Dòng 1: Chứa số nguyên n (1 ≤ n ≤ 106).
- Dòng 2: Chứa n số nguyên ai (1 ≤ ai ≤ 106 , với i = 1, 2, …, n).

- Dòng 3: Chứa số nguyên x (1 ≤ x ≤ 2.106).

• Kết quả: Ghi ra file văn bản SUMX.OUT gồm 1 dòng duy nhất ghi tổng số cặp
tìm được.
• Ví dụ:
SUMX.INP SUMX.OUT

9 3

5 12 7 10 9 1 2 3 11

13

Chú ý: Các số trên cùng 1 dòng trong file input phải cách nhau 1 dấu cách.

Giải thích: Trong ví dụ trên, có 3 cặp (ai, aj) mà ai + aj = 13 là:

(12, 1), (10, 3), (2, 11).

Bài 4: LINUXIAD
Trong một cuộc chiến dài và đẫm máu, chàng Linuxiad đã đánh bại rồng Xlup
trong một hang sâu. Chàng tìm được một hòm cổ chứa một chuỗi hạt rất dài và
đẹp. Chuỗi ngọc gồm các hạt ngọc màu trắng và xanh nối liên tiếp nhau nhưng
không tạo thành vòng. Ngọc rất quan trọng đối với bộ lạc Megalinuxiad vì
chúng được dùng trong các lễ hội của bộ lạc.
Thật không may, có một lệ cũ mà Linuxiad không thể lấy chuỗi ngọc, vì vậy
chàng phải tặng ngọc cho những người đứng đầu bộ tộc. Theo tục lệ, trước tiên
chàng phải tặng X viên ngọc xanh và Y viên ngọc trắng cho tù trưởng. Số ngọc
trắng còn lại phải chia đều cho P pháp sư, số ngọc xanh còn lại chia đều cho Q
trưởng lão. Ví dụ Megalinuxiad có 11 viên ngọc trắng, 17 viên ngọc xanh, X =
2, Y = 3, bộ lạc có 4 pháp sư và 5 trưởng lão. Như vậy chàng phải tặng cho tù
trưởng 2 viên ngọc xanh, 3 viên ngọc trắng, chia cho 4 các vị pháp sư mỗi
người 2 viên ngọc trắng, và tặng 5 vị trưởng lão mỗi người 3 viên ngọc xanh.
Linuxiad cũng muốn có một vài viên ngọc nên chàng tìm cách giữ lại cho mình
một ít. Để tránh rắc rối, Linuxiad quyết định lấy một phần lớn của chuỗi ngọc
đem nộp cho bộ lạc, phần còn lại chàng giữ. Tuy nhiên, để tránh bị nghi ngờ,
chàng chỉ có thế cắt phần đầu hoặc phần cuối của chuỗi ngọc để giữ lại cho
mình còn đoạn giữa chàng đem nộp cho bộ lạc. Mặc dù rất can đảm và mưu trí
nhưng việc này Linuxiad phải nhờ đến bạn. Bạn hãy giúp Linuxiad tìm ra đoạn
ngọc lớn nhất có thể và thỏa mãn các điều kiện để nộp cho bộ lạc.
Input: LINUXIAD.INP
▪ Dòng đầu tiên là năm số nguyên dương N, X, Y, P, Q. Trong đó N là số
hạt ngọc trong chuỗi ngọc.
▪ Dòng thứ hai ghi N kí tự B hoặc W mô tả các viên ngọc. Trong đó B là
viên ngọc xanh còn W là viên ngọc trắng.
▪ Input đảm bảo luôn có cách chia.
Output: LINUXIAD.OUT
▪ Ghi ra 2 số là số thứ tự của viên ngọc bắt đầu và viên ngọc kết thúc của
chuỗi ngọc ở giữa mà Linuxiad đem nộp cho bộ lạc.
Giới hạn: 1 ≤ N ≤ 106. Trong 50% số test, N ≤ 2000.1 ≤ X < Q ≤ 100, 1 ≤ Y < P
≤ 100
Ví dụ:
LINUXIAD.INP LINUXIAD.OUT
11 2 3 4 5 2 10
BBWWWWBWWWW

You might also like