| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2012 - Lunch | 100 (p) | 1.0s | 256M |
| 2 | JOI 2012 - Soccer | 100 (p) | 1.0s | 256M |
| 3 | JOI 2012 - Best Pizza | 100 (p) | 1.0s | 256M |
| 4 | JOI 2012 - Pasta | 100 (p) | 1.0s | 256M |
| 5 | JOI 2012 - Illumination | 100 (p) | 1.0s | 256M |
| 6 | JOI 2012 - Zig-Zag Numbers | 100 (p) | 1.0s | 256M |
Quán mì Ý JOI có một thực đơn ăn trưa rất được yêu thích, gồm mì Ý được giới thiệu trong ngày và nước ép trái cây tươi. Khi gọi một suất ăn này, khách chọn một trong ba loại mì Ý và một trong hai loại nước ép của ngày hôm đó. Giá của suất ăn bằng tổng giá của mì Ý và nước ép đã chọn, trừ đi \(50\) yên.
Cho giá của các loại mì Ý và nước ép trong một ngày, hãy tính giá thấp nhất của một suất ăn trong ngày đó.
Dữ liệu vào gồm \(5\) dòng, mỗi dòng chứa một số nguyên dương:
Các mức giá đều được tính bằng yên.
In ra một dòng chứa giá thấp nhất của một suất ăn trong ngày đó, tính bằng yên.
Ví dụ 1
800
700
900
198
330
848
Chọn loại mì Ý thứ hai và loại nước ép thứ nhất sẽ cho giá thấp nhất là \(700 + 198 - 50 = 848\) yên.
Ví dụ 2
1999
1999
100
189
100
150
Chọn loại mì Ý thứ ba và loại nước ép thứ hai sẽ cho giá thấp nhất là \(100 + 100 - 50 = 150\) yên.
Ở đất nước JOI, bóng đá rất được yêu thích và giải đấu JOI được tổ chức hằng tuần.
Giải đấu có \(N\) đội bóng, được đánh số từ \(1\) đến \(N\). Mỗi cặp đội thi đấu với nhau đúng một trận, nên tổng số trận đấu là \(N(N-1)/2\). Kết quả mỗi trận được xác định bằng số bàn thắng của hai đội. Đội thắng nhận \(3\) điểm xếp hạng, đội thua nhận \(0\) điểm; nếu hòa, mỗi đội nhận \(1\) điểm.
Thứ hạng được xác định theo tổng điểm xếp hạng của mỗi đội, không xét hiệu số bàn thắng bại. Các đội bằng điểm cùng nhận thứ hạng cao nhất trong các vị trí mà chúng chiếm. Nói cách khác, thứ hạng của một đội bằng \(1\) cộng với số đội có tổng điểm lớn hơn đội đó.
Cho kết quả của tất cả các trận đấu, hãy xác định thứ hạng của từng đội.
Dòng đầu tiên chứa số nguyên \(N\), là số đội bóng.
Trong \(N(N-1)/2\) dòng tiếp theo, dòng thứ \(i\) chứa bốn số nguyên \(A_i\), \(B_i\), \(C_i\), \(D_i\), cách nhau bởi dấu cách. Dòng này mô tả trận đấu giữa đội \(A_i\) và đội \(B_i\), trong đó đội \(A_i\) ghi \(C_i\) bàn và đội \(B_i\) ghi \(D_i\) bàn.
In ra \(N\) dòng. Dòng thứ \(i\) chứa một số nguyên là thứ hạng của đội \(i\), với \(1 \le i \le N\).
Ví dụ 1
4
1 2 0 1
1 3 2 1
1 4 2 2
2 3 1 1
2 4 3 0
3 4 1 3
2
1
4
2
Có \(4\) đội tham gia và \(4 \times (4-1)/2 = 6\) trận đấu. Kết quả được tổng hợp trong bảng sau. Trong mỗi ô tỉ số, số bên trái dấu gạch nối là số bàn của đội ở hàng đó, còn số bên phải là số bàn của đội ở cột đó.
| Đội | Đội 1 | Đội 2 | Đội 3 | Đội 4 | Thắng | Thua | Hòa | Điểm xếp hạng |
|---|---|---|---|---|---|---|---|---|
| Đội 1 | — | 0 - 1 | 2 - 1 | 2 - 2 | 1 | 1 | 1 | 4 |
| Đội 2 | 1 - 0 | — | 1 - 1 | 3 - 0 | 2 | 0 | 1 | 7 |
| Đội 3 | 1 - 2 | 1 - 1 | — | 1 - 3 | 0 | 2 | 1 | 1 |
| Đội 4 | 2 - 2 | 0 - 3 | 3 - 1 | — | 1 | 1 | 1 | 4 |
Đội \(2\) có nhiều điểm nhất nên đứng thứ \(1\). Tiếp theo là đội \(1\) và đội \(4\), cùng đứng thứ \(2\). Đội \(3\) có ít điểm nhất nên đứng thứ \(4\).
Ví dụ 2
5
1 2 1 1
3 4 3 1
5 1 1 2
2 3 0 0
4 5 2 3
1 3 0 2
5 2 2 2
4 1 4 5
3 5 4 0
2 4 0 1
2
4
1
4
3
Kết quả của các đội như sau:
| Đội | Thắng | Thua | Hòa | Điểm xếp hạng |
|---|---|---|---|---|
| Đội 1 | 2 | 1 | 1 | 7 |
| Đội 2 | 0 | 1 | 3 | 3 |
| Đội 3 | 3 | 0 | 1 | 10 |
| Đội 4 | 1 | 3 | 0 | 3 |
| Đội 5 | 1 | 2 | 1 | 4 |
Chủ tịch K là khách quen của tiệm pizza JOI ở trung tâm thành phố JOI. Vì một số lý do, ông quyết định bắt đầu tiết kiệm từ tháng này. Ông muốn gọi chiếc pizza có số calo trên mỗi đô la lớn nhất trong số những chiếc pizza có thể gọi tại tiệm. Ta gọi một chiếc pizza như vậy là “pizza tốt nhất”. Có thể có nhiều loại pizza tốt nhất.
Tiệm có \(N\) loại nguyên liệu phủ. Khách có thể tùy ý chọn một số loại để đặt lên đế bánh, nhưng không được chọn cùng một loại từ hai lần trở lên. Khách cũng có thể gọi pizza chỉ có đế bánh, không có nguyên liệu phủ nào.
Đế bánh có giá \(A\) đô la và mỗi loại nguyên liệu phủ đều có giá \(B\) đô la. Giá một chiếc pizza bằng tổng giá đế bánh và các nguyên liệu phủ đã chọn. Vì vậy, pizza có \(k\) loại nguyên liệu phủ, với \(0 \le k \le N\), có giá \(A + kB\) đô la. Tổng số calo của pizza bằng số calo của đế bánh cộng với số calo của các nguyên liệu phủ đã chọn.
Cho giá đế bánh, giá nguyên liệu phủ và số calo của đế bánh cùng từng loại nguyên liệu phủ, hãy tính số calo trên mỗi đô la của pizza tốt nhất.
Dữ liệu vào gồm \(N+3\) dòng:
In ra một dòng chứa số calo trên mỗi đô la của pizza tốt nhất. Bỏ phần thập phân và in kết quả dưới dạng số nguyên.
Ví dụ 1
3
12 2
200
50
300
100
37
Chọn loại nguyên liệu phủ thứ \(2\) và thứ \(3\) sẽ được chiếc pizza có \(200 + 300 + 100 = 600\) calo, với giá \(12 + 2 \times 2 = 16\) đô la.
Chiếc pizza này có \(600/16 = 37{,}5\) calo trên mỗi đô la và là pizza tốt nhất. Bỏ phần thập phân của \(37{,}5\), ta in ra \(37\).
Ví dụ 2
4
20 3
900
300
100
400
1300
100
Bạn rất thích mì Ý và ngày nào cũng tự nấu mì Ý cho bữa tối. Bạn biết làm ba loại mì Ý: sốt cà chua, sốt kem và sốt húng quế.
Bạn quyết định lên thực đơn bữa tối cho \(N\) ngày. Mỗi ngày, bạn chọn một trong ba loại mì Ý. Tuy nhiên, ăn cùng một loại liên tục sẽ gây chán, nên không được chọn cùng một loại mì Ý trong ba ngày liên tiếp trở lên. Ngoài ra, loại mì Ý của \(K\) ngày trong số \(N\) ngày đã được quyết định trước.
Cho \(N\) và thông tin về \(K\) ngày đã quyết định, hãy đếm số thực đơn thỏa mãn các điều kiện trên và lấy phần dư khi chia cho \(10000\).
Dữ liệu vào gồm \(K+1\) dòng.
Dòng đầu tiên chứa hai số nguyên \(N\), \(K\), cách nhau bởi dấu cách.
Dòng thứ \(1+i\), với \(1 \le i \le K\), chứa hai số nguyên \(A_i\), \(B_i\), cách nhau bởi dấu cách. Điều này có nghĩa là loại mì Ý của ngày thứ \(A_i\) đã được quyết định:
In ra một dòng chứa phần dư khi chia số thực đơn hợp lệ cho \(10000\).
Ví dụ 1
5 3
3 1
1 1
4 2
6
Bạn lên thực đơn cho \(5\) ngày. Ngày thứ \(1\) và thứ \(3\) ăn mì Ý sốt cà chua; ngày thứ \(4\) ăn mì Ý sốt kem. Không được chọn cùng một loại trong ba ngày liên tiếp trở lên. Có \(6\) thực đơn thỏa mãn:
| Thực đơn | Ngày 1 | Ngày 2 | Ngày 3 | Ngày 4 | Ngày 5 |
|---|---|---|---|---|---|
| 1 | 1 | 2 | 1 | 2 | 1 |
| 2 | 1 | 2 | 1 | 2 | 2 |
| 3 | 1 | 2 | 1 | 2 | 3 |
| 4 | 1 | 3 | 1 | 2 | 1 |
| 5 | 1 | 3 | 1 | 2 | 2 |
| 6 | 1 | 3 | 1 | 2 | 3 |
Trong bảng, \(1\) là sốt cà chua, \(2\) là sốt kem và \(3\) là sốt húng quế.
Ví dụ 2
20 5
10 2
4 3
12 1
13 2
9 1
2640
Có tất cả \(4112640\) thực đơn hợp lệ. Phần dư khi chia số này cho \(10000\) là \(2640\), nên in ra \(2640\).
Các tòa nhà của công ty JOI có hình dạng được ghép từ những hình lục giác đều có cạnh dài \(1\) mét. Giáng sinh đang đến gần, nên công ty quyết định trang trí các bức tường của tòa nhà bằng đèn. Tuy nhiên, trang trí những phần không thể nhìn thấy từ bên ngoài là lãng phí. Vì vậy, chỉ trang trí các mặt tường có thể đi tới từ bên ngoài mà không đi xuyên qua tòa nhà.
Hình minh họa trong phần giải thích Ví dụ 1 cho thấy một cách bố trí các tòa nhà nhìn từ trên cao. Những con số trong mỗi ô lục giác biểu thị tọa độ. Ô màu xám là nơi có tòa nhà, còn ô màu trắng là nơi không có tòa nhà.
Cho bản đồ biểu diễn vị trí các tòa nhà, hãy tính tổng chiều dài các mặt tường cần trang trí bằng đèn. Có thể đi lại tự do ở bên ngoài bản đồ, nhưng không thể đi qua giữa hai tòa nhà kề nhau.
Dòng đầu tiên chứa hai số nguyên \(W\), \(H\), cách nhau bởi dấu cách.
Tiếp theo là \(H\) dòng mô tả vị trí các tòa nhà. Dòng thứ \(i+1\), với \(1 \le i \le H\), chứa \(W\) số nguyên cách nhau bởi dấu cách. Số thứ \(j\), với \(1 \le j \le W\), bằng \(1\) nếu ô lục giác ở tọa độ \((j,i)\) có tòa nhà và bằng \(0\) nếu không có.
Tọa độ trên bản đồ tuân theo các quy tắc sau:
In ra một dòng chứa tổng chiều dài các mặt tường cần trang trí bằng đèn, tính bằng mét.
Ví dụ 1
8 4
0 1 0 1 0 1 1 1
0 1 1 0 0 1 0 0
1 0 1 0 1 1 1 1
0 1 1 0 1 0 1 0
64
Các đoạn nét liền màu đỏ trong hình biểu thị những mặt tường cần trang trí. Ví dụ này tương ứng với bản đồ trong hình; tổng chiều dài các mặt tường cần trang trí là \(64\) mét.
Ví dụ 2
8 5
0 1 1 1 0 1 1 1
0 1 0 0 1 1 0 0
1 0 0 1 1 1 1 1
0 1 0 1 1 0 1 0
0 1 1 0 1 1 0 0
56
Một số nguyên dương được gọi là số zigzag nếu khi viết số đó trong hệ thập phân, không có chữ số \(0\) ở đầu, rồi đọc các chữ số theo thứ tự từ trái sang phải, các bước tăng và giảm luân phiên nhau. Các bước tăng và giảm đều là nghiêm ngặt.
Ví dụ, \(2947\) là số zigzag vì dãy chữ số \(2 \to 9 \to 4 \to 7\) lần lượt tăng, giảm, rồi tăng. Số \(71946\) cũng là số zigzag vì các bước lần lượt là giảm, tăng, giảm, rồi tăng. Ngược lại, \(123\), \(71446\), \(71442\) và \(88\) không phải số zigzag. Mọi số nguyên dương có một chữ số đều được coi là số zigzag.
Đếm số zigzag là bội của \(M\) trong đoạn từ \(A\) đến \(B\), kể cả hai đầu mút, rồi lấy phần dư khi chia số lượng đó cho \(10000\).
Dữ liệu vào gồm \(3\) dòng, mỗi dòng chứa một số nguyên dương. Ba dòng lần lượt chứa \(A\), \(B\) và \(M\).
Lưu ý rằng \(A\) và \(B\) có thể không nằm trong phạm vi biểu diễn của các kiểu dữ liệu số nguyên thông thường.
In ra một dòng chứa phần dư khi chia số lượng các số zigzag là bội của \(M\) trong đoạn \([A,B]\) cho \(10000\).
Ví dụ 1
100
200
5
13
Có \(13\) số zigzag là bội của \(5\) trong đoạn từ \(100\) đến \(200\): \(105\), \(120\), \(130\), \(140\), \(150\), \(160\), \(165\), \(170\), \(175\), \(180\), \(185\), \(190\) và \(195\).
Ví dụ 2
6
1234567
3
246
Có \(50246\) số zigzag là bội của \(3\) trong đoạn từ \(6\) đến \(1234567\). Phần dư khi chia số này cho \(10000\) là \(246\), nên in ra \(246\).