You are on page 1of 4

Bài 1.

TẮC KÈ
Suốt trong mùa mưa, một bức tường của một ngôi nhà bị quấy phá bởi các con muỗi. Bức
tường này được phủ bởi M*N viên đá, trong đó có M hàng từ trên xuống dưới, và N cột từ
trái sang phải. Mỗi viên đá có từ 1 đến 1000 con muỗi.
Một con tắc kè muốn ăn nhiều muỗi nhất có thể, tuy nhiên mục đích này bị một giới hạn
như sau: Con tắc kè luôn bắt đầu chọn viên đá ở hàng trên đỉnh, và ăn những con muỗi ở
đó. Sau đó, nó di chuyển đến hàng tiếp theo thấp hơn và ăn những con muỗi ở đó. Nó tiếp
tục di chuyển và ăn muỗi như vậy đến khi chạm sàn nhà thì thôi. Nó chỉ có thể di chuyển
theo chiều dọc từ trên xuống dưới và chiều ngang lệch không quá một ô, xem hình dưới
đây.

Cho kích thước của bức tường và số con muỗi trên mỗi viên đá lát bức tường. Hãy viết
chương trình tính số lượng lớn nhất các con muỗi mà con tắc kè có thể ăn.
Dữ liệu vào từ tệp GECKO.INP gồm:
Dòng đầu ghi hai số M và N (1≤ M, N ≤ 500) thể hiện chiều cao và chiều rộng của bức
tường.
Mỗi dòng trong M dòng tiếp theo ghi N số, trong đó số thứ j của hàng thứ i+1 thể hiện số
con muỗi có trên viên đá thứ j của hàng thứ i.
Kết quả ghi ra tệp GECKO.OUT ghi một số duy nhất là số con muỗi nhiều nhất mà con tắc
kè có thể ăn được.
Ví dụ:
GECKO.INP GECKO.OUT
65 32
31742
21311
1 2218
2 2153
21444
57251

Bài 2. RỬA NHÀ KHO


Tại nhà kho của mình, Bờm phục vụ cho N con bò chỉ bằng một loại thức ăn. Thời gian
trôi đi và các chú bò ngày càng buồn chán cách phục vụ kiểu này. Vì vậy anh quyết định
sẽ phục vụ đàn bò bằng M loại thức ăn khác nhau, các loại thức ăn được đánh số từ 1 đến
M. Tuy nhiên, các chú bò lại kén cá chọn canh. Con bò thứ i thích loại thức ăn Pi và nó chỉ
ăn loại thức ăn khoái khẩu đó.
Mỗi ngày đến giờ ăn, những chú bò xếp hàng bên ngoài để vào nhà kho theo một thứ tự đã
định sẵn. Để tiết kiệm thời gian, Bờm phục vụ các con bò theo nhóm liên tiếp theo thứ tự
xếp hàng. Sau mỗi nhóm, anh ta sẽ rửa nhà kho và phục vụ nhóm tiếp theo. Mỗi nhóm gồm
ít nhất một con bò được xếp hàng liên tiếp. Mỗi con bò thuộc đúng một nhóm. Thật không
may, với càng nhiều loại thức ăn, việc rửa nhà kho lại càng lâu. Nếu Bờm phục vụ K loại
thức ăn thì anh ta cần K*K đơn vị thời gian để rửa nhà kho.
Xác định tổng thời gian nhỏ nhất mà Bờm cần sử dụng để rửa nhà kho.
Dữ liệu vào từ tệp CLEAN.INP gồm:
Dòng đầu tiên ghi số N và M (1 ≤ M ≤ N ≤ 40000)
Mỗi dòng trong N dòng tiếp theo, dòng thứ i ghi một số nguyên dương Pi thể hiện loại thức
ăn mà con bò xếp thứ i trong hàng thích. (1≤ Pi ≤ M)
Kết quả ghi ra tệp CLEAN.OUT ghi một số duy nhất là tổng thời gian nhỏ nhất mà Bờm
cần sử dụng để rửa nhà kho.
Ví dụ:
CLEAN.INP CLEAN.OUT
13 4 11
1
2 Giải thích:
1 Bốn nhóm đầu chỉ gồm một con.
3 Nhóm 5 gồm 2 con
2 Nhóm 6 gồm 4 con 3, 4, 3, 4, 3
2 Nhóm cuối gồm 2 con
3 Tổng thời gian:
4 (1+1+1+1)+1+22+22=11.
3
4
3
1
4

Bài 3. PHÂN TÍCH XÂU


Cho một tập S gồm N xâu kí tự S1, S2, …, SN. Các xâu chỉ gồm các kí tự thường từ a đến
z. Với một xâu T cho trước, một cách phân tích xâu T thông qua tập S là cách để biểu diễn
xâu T bởi: T1T2…Tk
trong đó Ti (i=1..k) là các xâu thuộc tập S. Hai cách phân tích xâu T thành: P1P2…Pk và
Q1Q2…Qm được coi là như nhau nếu: m = k và Pi=Qi (i=1..k).
Cho trước tập S và xâu T, hãy viết chương trình để tính xem có bao nhiêu cách khác nhau
để phân tích xâu T thông qua tập S. Vì có thể số cách phân tích là rất lớn nên chỉ cần đưa
ra phần dư của nó khi chia cho 18102008.
Dữ liệu vào từ tệp STRINGS.INP gồm:
Dòng đầu ghi xâu T (độ dài của T ≤ 50000).
Dòng thứ hai ghi số N (N ≤ 10000).
Dòng thứ i trong N dòng tiếp theo ghi xâu Si (độ dài mỗi xâu Si ≤ 100).
Kết quả ghi ra tệp STRINGS.OUT gồm một số duy nhất là phần dư của của phép chia số
cách phân tích cho 18102008.
Ví dụ:
STRINGS.INP STRINGS.OUT
ababc 2
4
ab
abc
bc
aba

Bài 4. TRỌNG SỐ CỦA CÂY


Cây trong đồ thị là một đồ thị liên thông gồm N đỉnh và N-1 cạnh. Cây có tính chất là giữa
hai đỉnh bất kỳ tồn tại một đường đi duy nhất.
Bạn được cho một cây với các cạnh được gán các trong số không âm. Trọng số của một
đường đi được tính bằng tích trọng số của các cạnh nằm trên nó. Trọng số của cây là tổng
của trọng số các đường đi nối giữa hai cạnh bất kỳ. Hai đường đi từ A đến B và B đến A
giữa A và B chỉ cần tính một lần.
Bạn cho một cây, hãy tính trọng số của cây đó chia lấy dư 1000000007.
Dữ liệu vào từ tệp TREE.INP gồm:
Dòng đầu tiên ghi số N là số đỉnh của cây (1 ≤ N ≤ 100000).
N −1 dòng tiếp theo mỗi dòng ghi ba số A, B và W (1 ≤ A, B ≤ N, 0 ≤ W ≤ 1000) thể hiện
cạnh từ A đến B có trọng số W.
Kết quả ghi ra tệp TREE.OUT gồm một số duy nhất là đáp án cần tìm.
Ví dụ:

TREE.INP TREE.OUT
4 90
125
135
145
5 55
122
233
432
532

Bài 5. MẠNG TOÀN CẦU


Bờm biết rằng trên thế giới có rất nhiều nút mạng. Hai nút mạng có thể được nối trực tiếp
hoặc gián tiếp với nhau thông qua các đường truyền dữ liệu hai chiều. Hai nút mạng được
gọi là có thể truyền dữ liệu cho nhau nếu nó được nối trực tiếp hoặc được nối gián tiếp
thông qua một số đường truyền.
Bờm nhận thấy rằng một số nút rất quan trọng do nếu vì một nguyên nhân nào đó nó bị
hỏng và dữ liệu không thể thông qua nó được thì một số cặp nút mạng khác từ có thể
truyền dữ liệu cho nhau trở nên không thể truyền cho nhau nữa.
Một cụm gồm các nút mạng kết nối được với nhau được gọi là bền vững nếu chỉ xét các
nút và các đường truyền giữa chúng thì khi một nút mạng bất kỳ bị hỏng thì phần còn lại
vẫn truyền được dữ liệu cho nhau. Một cách phân chia mạng được gọi là bền vững nếu
cách phân đó phân mạng ra thành các cụm sao cho các cụm này là bền vững và số cụm
mạng là nhỏ nhất nhưng tổng số nút là lớn nhất có thể. Nhớ rằng, một nút có thể thuộc
nhiều cụm mạng và một nút phải thuộc ít nhất một cụm mạng.
Bạn hãy viết một chương trình giúp Bờm tìm số nút mạng quan trọng, cụm mạng có nhiều
nút mạng nhất và liệt kê ra các nút mạng quan trọng trong cách phân chia mạng bền vững.
Dữ liệu vào từ tệp GLOBALNET.INP gồm:
Dòng đầu ghi hai số N và M là số nút mạng và số đường truyền dữ liệu hai chiều nối giữa
chúng (2 ≤ N ≤ 10000, 1≤ M ≤ 1000000).
Trong M dòng tiếp theo, mỗi dòng ghi hai số x và y (1≤ x, y ≤ n) thể hiện một đường đi
hai chiều nối giữa chúng. Giữa hai nút mạng bất kỳ có nhiều nhất một đường truyền nối
giữa chúng.
Kết quả ghi ra tệp GLOBALNET.OUT gồm:
Dòng đầu ghi số K là số nút mạng quan trọng và Smax là số nút mạng lớn trong các cụm
mạng bền vững.
K dòng tiếp theo mỗi dòng ghi một nút mạng quan trọng. Các nút này được liệt kê theo thứ
tự từ điển từ bé đến lớn.
Ví dụ
GLOBALNET.INP GLOBALNET.OUT
6712 23
2 3 3
3 1 4
4 3
4 5
5 6
6 4

You might also like