JOI 2012/2013 - Vòng sơ khảo

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 JOI 2013 - Homework 100 (p) 1.0s 256M
2 JOI 2013 - Unique Number 100 (p) 1.0s 256M
3 JOI 2013 - Signboard 100 (p) 1.0s 256M
4 JOI 2013 - Hot Days 100 (p) 1.0s 256M
5 JOI 2013 - Fish 100 (p) 1.0s 256M
6 JOI 2013 - Gifts 100 (p) 1.0s 256M

1. JOI 2013 - Homework

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Lần nào JOI cũng khổ sở vì bài tập trong kỳ nghỉ đông, nên lần này cậu quyết định lên kế hoạch làm bài tập. Bài tập gồm một quyển bài tập tiếng Nhật có \(A\) trang và một quyển bài tập toán có \(B\) trang.

Mỗi ngày, JOI có thể làm tối đa \(C\) trang bài tập tiếng Nhật và tối đa \(D\) trang bài tập toán. Tuy nhiên, nếu làm bài tập trong một ngày thì cậu không thể vui chơi trong ngày đó.

Kỳ nghỉ đông kéo dài \(L\) ngày và JOI phải hoàn thành bài tập trong kỳ nghỉ. Hãy viết chương trình tính số ngày vui chơi nhiều nhất mà JOI có thể có trong kỳ nghỉ đông.

Yêu cầu

Tính số ngày vui chơi nhiều nhất mà JOI có thể có trong kỳ nghỉ đông mà vẫn hoàn thành toàn bộ bài tập.

Dữ liệu vào

Dữ liệu vào gồm \(5\) dòng, mỗi dòng chứa một số nguyên dương.

  • Dòng thứ nhất chứa số nguyên \(L\) (\(2\le L\le40\)), là số ngày của kỳ nghỉ đông.
  • Dòng thứ hai chứa số nguyên \(A\) (\(1\le A\le1000\)), là số trang bài tập tiếng Nhật.
  • Dòng thứ ba chứa số nguyên \(B\) (\(1\le B\le1000\)), là số trang bài tập toán.
  • Dòng thứ tư chứa số nguyên \(C\) (\(1\le C\le100\)), là số trang bài tập tiếng Nhật tối đa mà JOI có thể làm trong một ngày.
  • Dòng thứ năm chứa số nguyên \(D\) (\(1\le D\le100\)), là số trang bài tập toán tối đa mà JOI có thể làm trong một ngày.

Dữ liệu bảo đảm JOI có thể hoàn thành toàn bộ bài tập trong kỳ nghỉ đông và có ít nhất \(1\) ngày để vui chơi.

Dữ liệu ra

In ra một dòng chứa số ngày vui chơi nhiều nhất mà JOI có thể có trong kỳ nghỉ đông.

Ví dụ 1

Input
20
25
30
6
8
Output
15

Kỳ nghỉ đông kéo dài \(20\) ngày, bài tập tiếng Nhật có \(25\) trang và bài tập toán có \(30\) trang. Mỗi ngày, JOI có thể làm tối đa \(6\) trang tiếng Nhật và \(8\) trang toán. Chẳng hạn, nếu bắt đầu từ ngày đầu tiên và mỗi ngày làm \(6\) trang tiếng Nhật, \(8\) trang toán cho đến khi hoàn thành từng môn, cậu sẽ làm xong bài tập tiếng Nhật vào ngày thứ \(5\) và bài tập toán vào ngày thứ \(4\). Khi đó, cậu có thể vui chơi trong \(15\) ngày. Đây là số ngày vui chơi lớn nhất, nên in ra \(15\).

Ví dụ 2

Input
15
32
48
4
6
Output
7

Chẳng hạn, nếu bắt đầu từ ngày đầu tiên và mỗi ngày làm \(4\) trang tiếng Nhật, \(6\) trang toán, JOI sẽ hoàn thành cả hai quyển bài tập vào ngày thứ \(8\) và có \(7\) ngày vui chơi. Đây là số ngày vui chơi lớn nhất, nên in ra \(7\).

2. JOI 2013 - Unique Number

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

JOI quyết định chơi một trò chơi cùng bạn bè. Có \(N\) người tham gia. Luật của một lượt chơi như sau:

Mỗi người viết một số nguyên tùy ý từ \(1\) đến \(100\) lên một tấm thẻ rồi nộp thẻ. Nếu không có người nào khác viết cùng số với mình, người đó nhận được số điểm bằng số đã viết. Nếu có người khác viết cùng số, người đó không nhận được điểm nào.

JOI và các bạn đã chơi \(3\) lượt. Cho biết các số mà mỗi người đã viết trong cả \(3\) lượt, hãy viết chương trình tính tổng số điểm mỗi người nhận được sau \(3\) lượt chơi.

Yêu cầu

Tính tổng số điểm mà mỗi người chơi nhận được sau \(3\) lượt.

Dữ liệu vào

Dữ liệu vào gồm \(1+N\) dòng.

  • Dòng đầu tiên chứa số nguyên \(N\) (\(2\le N\le200\)), là số người chơi.
  • Dòng thứ \(i\) trong \(N\) dòng tiếp theo (\(1\le i\le N\)) chứa ba số nguyên từ \(1\) đến \(100\), cách nhau bởi dấu cách. Chúng lần lượt là các số người chơi thứ \(i\) đã viết trong lượt thứ nhất, thứ hai và thứ ba.

Dữ liệu ra

In ra \(N\) dòng. Dòng thứ \(i\) (\(1\le i\le N\)) chứa một số nguyên là tổng số điểm người chơi thứ \(i\) nhận được sau \(3\) lượt chơi.

Ví dụ 1

Input
5
100 99 98
100 97 92
63 89 63
99 99 99
89 97 98
Output
0
92
215
198
89

Chi tiết số điểm của từng người trong \(3\) lượt chơi như sau:

  • Người chơi \(1\): \(0+0+0=0\).
  • Người chơi \(2\): \(0+0+92=92\).
  • Người chơi \(3\): \(63+89+63=215\).
  • Người chơi \(4\): \(99+0+99=198\).
  • Người chơi \(5\): \(89+0+0=89\).

Ví dụ 2

Input
3
89 92 77
89 92 63
89 63 77
Output
0
63
63

3. JOI 2013 - Signboard

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

JOI quyết định làm một tấm biển hiệu cho cửa hàng.

\(N\) tấm biển hiệu cũ, trên mỗi tấm các chữ cái được viết cách đều nhau. JOI sẽ làm biển hiệu bằng cách xóa một số chữ cái trên một tấm biển cũ. Cậu muốn các chữ cái còn lại, đọc theo thứ tự, tạo thành tên cửa hàng và vẫn nằm cách đều nhau. Mỗi biển hiệu phải được làm từ đúng một tấm biển cũ; không được cắt hoặc nối các tấm biển.

Cho tên cửa hàng và thông tin về \(N\) tấm biển cũ, hãy viết chương trình tính số tấm biển hiệu mà JOI có thể làm được. Nếu có nhiều cách làm biển hiệu từ cùng một tấm biển cũ thì tấm biển đó vẫn chỉ được tính một lần.

Yêu cầu

Tính số tấm biển cũ mà từ đó JOI có thể làm được biển hiệu mang tên cửa hàng.

Dữ liệu vào

Dữ liệu vào gồm \(2+N\) dòng.

  • Dòng đầu tiên chứa số nguyên \(N\) (\(1\le N\le100\)), là số tấm biển cũ.
  • Dòng thứ hai chứa một xâu gồm từ \(3\) đến \(25\) chữ cái tiếng Anh viết thường, là tên cửa hàng.
  • Dòng thứ \(i\) trong \(N\) dòng tiếp theo (\(1\le i\le N\)) chứa một xâu gồm từ \(1\) đến \(100\) chữ cái tiếng Anh viết thường, là xâu được viết trên tấm biển cũ thứ \(i\).

Dữ liệu ra

In ra một dòng chứa một số nguyên là số tấm biển hiệu mà JOI có thể làm được.

Ví dụ 1

Input
4
bar
abracadabra
bear
bar
baraxbara
Output
3

Tên cửa hàng là bar.

  • Tấm biển thứ nhất ghi abracadabra. Có thể làm biển hiệu bằng cách xóa tất cả chữ cái ngoại trừ các chữ ở vị trí thứ \(2\), \(6\)\(10\).
  • Với tấm biển thứ hai, xóa chữ cái thứ \(2\) sẽ được xâu bar, nhưng các chữ cái còn lại không nằm cách đều nhau.
  • Tấm biển thứ ba đã là biển hiệu phù hợp mà không cần xóa chữ cái nào.
  • Có hai cách làm biển hiệu từ tấm biển thứ tư: giữ lại các chữ cái thứ \(1\), \(2\), \(3\) và xóa các chữ còn lại; hoặc giữ lại các chữ cái thứ \(6\), \(7\), \(8\) và xóa các chữ còn lại.

Vì JOI có thể làm biển hiệu từ các tấm biển thứ \(1\), \(3\)\(4\), in ra \(3\).

4. JOI 2013 - Hot Days

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Vào thời điểm Nhật Bản đang là mùa đông, nước Úc ở Nam bán cầu lại trải qua những ngày nóng bức. IOI sống ở Úc và quyết định lên kế hoạch chọn quần áo dựa trên dự báo thời tiết cho \(D\) ngày. Nhiệt độ cao nhất của ngày thứ \(i\) (\(1\le i\le D\)) được dự báo là \(T_i\) độ.

IOI có \(N\) bộ quần áo, được đánh số từ \(1\) đến \(N\). Bộ thứ \(j\) (\(1\le j\le N\)) phù hợp để mặc vào những ngày có nhiệt độ cao nhất từ \(A_j\) đến \(B_j\) độ, kể cả hai đầu mút. Mỗi bộ quần áo còn có một số nguyên gọi là độ sặc sỡ; độ sặc sỡ của bộ thứ \(j\)\(C_j\).

Với mỗi ngày trong \(D\) ngày, IOI chọn một bộ quần áo phù hợp với nhiệt độ cao nhất theo dự báo. Có thể chọn cùng một bộ nhiều lần, và cũng có thể có những bộ không được chọn lần nào trong \(D\) ngày.

IOI muốn hạn chế mặc những bộ quần áo giống nhau trong hai ngày liên tiếp, nên cậu muốn tổng giá trị tuyệt đối của hiệu độ sặc sỡ giữa các bộ quần áo mặc trong hai ngày liên tiếp lớn nhất có thể. Cụ thể, nếu chọn bộ \(x_i\) vào ngày thứ \(i\), cậu muốn tối đa hóa giá trị

\[ |C_{x_1}-C_{x_2}|+|C_{x_2}-C_{x_3}|+\cdots+|C_{x_{D-1}}-C_{x_D}|. \]

Hãy viết chương trình tìm giá trị lớn nhất này.

Yêu cầu

Tính giá trị lớn nhất của tổng chênh lệch độ sặc sỡ giữa quần áo được chọn trong các ngày liên tiếp.

Dữ liệu vào

Dữ liệu vào gồm \(1+D+N\) dòng.

  • Dòng đầu tiên chứa hai số nguyên \(D,N\) (\(2\le D\le200\), \(1\le N\le200\)), cách nhau bởi dấu cách. \(D\) là số ngày cần lên kế hoạch và \(N\) là số bộ quần áo IOI có.
  • Dòng thứ \(i\) trong \(D\) dòng tiếp theo (\(1\le i\le D\)) chứa số nguyên \(T_i\) (\(0\le T_i\le60\)), cho biết nhiệt độ cao nhất dự báo cho ngày thứ \(i\)\(T_i\) độ.
  • Dòng thứ \(j\) trong \(N\) dòng tiếp theo (\(1\le j\le N\)) chứa ba số nguyên \(A_j,B_j,C_j\) (\(0\le A_j\le B_j\le60\), \(0\le C_j\le100\)). Bộ quần áo thứ \(j\) phù hợp với ngày có nhiệt độ cao nhất từ \(A_j\) đến \(B_j\) độ và có độ sặc sỡ \(C_j\).

Dữ liệu bảo đảm mỗi ngày trong \(D\) ngày đều có ít nhất một bộ quần áo phù hợp với nhiệt độ cao nhất theo dự báo.

Dữ liệu ra

In ra một dòng chứa giá trị lớn nhất của tổng giá trị tuyệt đối của hiệu độ sặc sỡ giữa các bộ quần áo mặc trong hai ngày liên tiếp, tức là giá trị lớn nhất của

\[ |C_{x_1}-C_{x_2}|+|C_{x_2}-C_{x_3}|+\cdots+|C_{x_{D-1}}-C_{x_D}|. \]

Ví dụ 1

Input
3 4
31
27
35
20 25 30
23 29 90
21 35 60
28 33 40
Output
80

Ngày thứ nhất có thể chọn bộ \(3\) hoặc \(4\); ngày thứ hai có thể chọn bộ \(2\) hoặc \(3\); ngày thứ ba chỉ có thể chọn bộ \(3\).

Chọn bộ \(4\) vào ngày thứ nhất, bộ \(2\) vào ngày thứ hai và bộ \(3\) vào ngày thứ ba, tức là \(x_1=4\), \(x_2=2\), \(x_3=3\). Giá trị tuyệt đối của hiệu độ sặc sỡ giữa hai ngày đầu là \(|40-90|=50\), còn giữa ngày thứ hai và thứ ba là \(|90-60|=30\). Tổng bằng \(80\), là giá trị lớn nhất.

Ví dụ 2

Input
5 2
26
28
32
29
34
30 35 0
25 30 100
Output
300

Trong các ngày từ thứ nhất đến thứ năm, IOI bắt buộc phải lần lượt chọn các bộ \(2,2,1,2,1\). Giá trị cần tìm là

\[ |100-100|+|100-0|+|0-100|+|100-0|=300. \]

5. JOI 2013 - Fish

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Phía tây lục địa Úc là Ấn Độ Dương rộng lớn. Nhà nghiên cứu hải dương JOI đang nghiên cứu đặc tính của \(N\) loài cá sống tại đây.

Mỗi loài cá có một vùng sinh sống xác định trong biển, có dạng hình hộp chữ nhật. Cá có thể di chuyển đến mọi điểm trong vùng sinh sống của mình, kể cả biên, nhưng không bao giờ đi ra ngoài vùng đó. Một điểm trong biển được biểu diễn bởi ba số thực \((x,y,d)\): khi nhìn từ trên cao, điểm này nằm cách một vị trí mốc \(x\) đơn vị về phía đông và \(y\) đơn vị về phía bắc, đồng thời có độ sâu \(d\) tính từ mặt biển. Giả sử mặt biển là một mặt phẳng.

JOI muốn biết phần biển nơi vùng sinh sống của ít nhất \(K\) loài cá chồng lên nhau lớn đến mức nào. Hãy viết chương trình tính tổng thể tích của toàn bộ phần biển đó.

Yêu cầu

Tính tổng thể tích phần biển nằm trong vùng sinh sống của ít nhất \(K\) loài cá.

Dữ liệu vào

Dữ liệu vào gồm \(1+N\) dòng.

  • Dòng đầu tiên chứa hai số nguyên \(N,K\) (\(1\le K\le N\le50\)), cách nhau bởi dấu cách. Có \(N\) loài cá và cần tính thể tích phần biển nơi vùng sinh sống của ít nhất \(K\) loài chồng lên nhau.
  • Dòng thứ \(i\) trong \(N\) dòng tiếp theo (\(1\le i\le N\)) chứa sáu số nguyên \(X_{i,1},Y_{i,1},D_{i,1},X_{i,2},Y_{i,2},D_{i,2}\). Vùng sinh sống của loài cá thứ \(i\) là hình hộp chữ nhật có tám đỉnh sau:
\[ \begin{gathered} (X_{i,1},Y_{i,1},D_{i,1}),\quad (X_{i,2},Y_{i,1},D_{i,1}),\\ (X_{i,2},Y_{i,2},D_{i,1}),\quad (X_{i,1},Y_{i,2},D_{i,1}),\\ (X_{i,1},Y_{i,1},D_{i,2}),\quad (X_{i,2},Y_{i,1},D_{i,2}),\\ (X_{i,2},Y_{i,2},D_{i,2}),\quad (X_{i,1},Y_{i,2},D_{i,2}). \end{gathered} \]

Các tọa độ thỏa mãn:

  • \(0\le X_{i,1}<X_{i,2}\le1000000=10^6\).
  • \(0\le Y_{i,1}<Y_{i,2}\le1000000=10^6\).
  • \(0\le D_{i,1}<D_{i,2}\le1000000=10^6\).

Dữ liệu ra

In ra một dòng chứa tổng thể tích của phần biển nơi vùng sinh sống của ít nhất \(K\) loài cá chồng lên nhau.

Ví dụ 1

Input
3 2
30 50 0 50 70 100
10 20 20 70 90 60
40 60 20 90 90 70
Output
49000

Chẳng hạn, điểm \((45,65,65)\) nằm trong vùng sinh sống của loài cá thứ \(1\) và thứ \(3\), nên thỏa mãn điều kiện. Ngược lại, điểm \((25,35,45)\) chỉ nằm trong vùng sinh sống của loài thứ \(2\), nên không thỏa mãn điều kiện.

Ví dụ 2

Input
1 1
0 0 0 1000000 1000000 1000000
Output
1000000000000000000

6. JOI 2013 - Gifts

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

JOI đến Úc du lịch và đã vui chơi, tham quan nhiều nơi. Cuối cùng, ngày trở về nước cũng đến. Hiện tại cậu đang ở thị trấn có sân bay quốc tế, nơi chuyến bay về nước của cậu sẽ khởi hành. Thị trấn được chia thành các ô theo các hướng đông, tây, nam, bắc; mỗi ô là đường đi, cửa hàng lưu niệm, nhà ở hoặc sân bay quốc tế. JOI xuất phát từ ô ở góc tây bắc và muốn đến sân bay quốc tế ở ô góc đông nam.

Từ ô hiện tại, JOI có thể đi sang một ô kề cạnh, nhưng không được vào ô có nhà ở. Để kịp giờ bay, cậu chỉ di chuyển sang ô phía đông hoặc phía nam. Tuy nhiên, do vẫn còn một chút thời gian dư, cậu được phép thực hiện tổng cộng tối đa \(K\) lần di chuyển sang ô phía bắc hoặc phía tây.

Khi vào một ô có cửa hàng lưu niệm, JOI sẽ mua quà cho các bạn ở Nhật Bản. Cậu đã tìm hiểu kỹ các cửa hàng, nên biết ở mỗi cửa hàng mình có thể mua bao nhiêu món quà. Hãy viết chương trình tính số món quà nhiều nhất mà JOI có thể mua.

Có thể bỏ qua thời gian mua sắm. Nếu đến cùng một cửa hàng từ hai lần trở lên, JOI chỉ mua quà trong lần ghé đầu tiên.

Yêu cầu

Tính số món quà nhiều nhất JOI có thể mua trên một hành trình hợp lệ từ góc tây bắc đến sân bay ở góc đông nam.

Dữ liệu vào

Dữ liệu vào gồm \(1+H\) dòng.

  • Dòng đầu tiên chứa ba số nguyên \(H,W,K\) (\(2\le H\le50\), \(2\le W\le50\), \(1\le K\le3\)), cách nhau bởi dấu cách.
  • Mỗi dòng trong \(H\) dòng tiếp theo chứa một xâu độ dài \(W\), mô tả các ô của thị trấn.

Gọi ô thứ \(i\) tính từ phía bắc và thứ \(j\) tính từ phía tây là \((i,j)\) (\(1\le i\le H\), \(1\le j\le W\)). Ký tự thứ \(j\) trên dòng thứ \(i\) của bản đồ có ý nghĩa như sau:

  • .: ô \((i,j)\) là đường đi hoặc sân bay quốc tế.
  • #: ô \((i,j)\) có nhà ở.
  • Một trong các ký tự 1, 2, ..., 9: ô \((i,j)\) có cửa hàng lưu niệm; chữ số đó là số món quà có thể mua tại cửa hàng.

Dữ liệu bảo đảm ô ở góc tây bắc, nơi JOI bắt đầu, là đường đi. Dữ liệu cũng bảo đảm JOI có thể đến được sân bay quốc tế.

Dữ liệu ra

In ra một dòng chứa một số nguyên là số món quà nhiều nhất mà JOI có thể mua.

Ví dụ 1

Input
5 4 2
...#
.#.#
.#73
8##.
....
Output
11

JOI đi về phía nam \(3\) lần và mua quà ở cửa hàng tại ô \((4,1)\). Sau đó, cậu đi thêm \(1\) lần về phía nam, \(3\) lần về phía đông, rồi \(2\) lần về phía bắc để mua quà ở cửa hàng tại ô \((3,4)\). Cuối cùng, cậu đi \(2\) lần về phía nam để đến sân bay quốc tế. Theo cách này, cậu mua được tổng cộng \(11\) món quà.

Ví dụ 2

Input
4 4 3
.8#9
9.#.
.#9.
....
Output
27