| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2019 - Triple Jump | 100 (p) | 4.0s | 512M |
| 2 | JOI 2019 - Remittance | 100 (p) | 1.0s | 256M |
| 3 | JOI 2019 - Virus Experiment | 100 (p) | 2.0s | 256M |
Có một con đường thẳng rất dài gồm \(N\) đoạn có độ dài bằng nhau, được đánh số từ \(1\) đến \(N\). Độ cứng của đoạn thứ \(i\) là \(A_i\).
JOI-kun, một ngôi sao thể thao tài năng, sẽ thực hiện môn nhảy ba bước. Mỗi lần nhảy ba bước gồm ba bước nhảy liên tiếp. Gọi \(a,b,c\) là số hiệu các đoạn đường mà JOI-kun giậm nhảy. Các số này phải thỏa mãn:
JOI-kun sẽ thực hiện \(Q\) lần nhảy ba bước. Trong lần thứ \(j\), các đoạn giậm nhảy phải có số hiệu từ \(L_j\) đến \(R_j\), tức là \(L_j\le a<b<c\le R_j\).
JOI-kun muốn giậm nhảy trên các đoạn đường cứng hơn. Với mỗi lần nhảy, hãy tính tổng độ cứng lớn nhất của ba đoạn giậm nhảy.
Dữ liệu được đọc từ đầu vào chuẩn. Tất cả các giá trị đều là số nguyên.
Ghi \(Q\) dòng ra đầu ra chuẩn. Dòng thứ \(j\) chứa tổng độ cứng lớn nhất của ba đoạn giậm nhảy trong lần nhảy thứ \(j\).
Ví dụ 1
5
5 2 1 5 3
3
1 4
2 5
1 5
12
9
12
Trong lần nhảy thứ nhất, JOI-kun có thể đạt tổng lớn nhất là \(12\) bằng cách giậm nhảy tại các đoạn \(1,2,4\).
Trong lần nhảy thứ hai, tổng lớn nhất là \(9\), đạt được tại các đoạn \(3,4,5\). Nếu chọn các đoạn \(2,4,5\), tổng độ cứng là \(10\) nhưng không thỏa mãn \(b-a\le c-b\).
Trong lần nhảy thứ ba, tổng lớn nhất là \(12\), đạt được tại các đoạn \(1,2,4\). Nếu chọn các đoạn \(1,4,5\), tổng độ cứng là \(13\) nhưng không thỏa mãn \(b-a\le c-b\).
Ví dụ 2
5
5 4 4 5 4
1
1 5
14
Dữ liệu này thỏa mãn ràng buộc của nhóm \(3\).
Ví dụ 3
15
12 96 100 61 54 66 37 34 58 21 21 1 13 50 81
12
1 15
3 12
11 14
1 13
5 9
4 6
6 14
2 5
4 15
1 7
1 10
8 13
277
227
72
262
178
181
174
257
208
262
262
113
JOI Open Contest 2019, bài Triple Jump (jumps), ngày 14/7/2019. Bản dịch từ đề tiếng Anh chính thức của JCIOI, theo giấy phép CC BY-SA 4.0.
Có \(N\) ngôi nhà quanh hồ Beaver ở vương quốc JOI, được đánh số từ \(1\) đến \(N\) theo chiều ngược kim đồng hồ.
Mỗi ngôi nhà có thể dùng dịch vụ chuyển tiền để gửi tiền đến ngôi nhà liền kề bên trái khi nhìn từ hồ: nhà \(i\) gửi đến nhà \(i+1\) nếu \(1\le i<N\), còn nhà \(N\) gửi đến nhà \(1\). Phí chuyển tiền bằng đúng số tiền được gửi. Số tiền gửi phải là một số nguyên yên. Khi gửi tiền phải trả phí ngay, nên tổng số tiền gửi và phí không được vượt quá số tiền hiện có trong nhà.
Hiện tại, nhà \(i\) có \(A_i\) yên. Vì lý do thuế, người ta muốn nhà \(i\) có đúng \(B_i\) yên. Bạn chỉ được dùng dịch vụ chuyển tiền này; không được tiêu tiền vào việc gì khác ngoài phí chuyển tiền, cũng không được chuyển tiền bằng cách khác.
Hãy xác định liệu có thể làm cho số tiền của tất cả các ngôi nhà đồng thời bằng số tiền mong muốn hay không.
Dữ liệu được đọc từ đầu vào chuẩn.
Ghi Yes nếu có thể đạt số tiền mong muốn ở mọi ngôi nhà bằng dịch vụ chuyển tiền; ngược lại, ghi No.
Ví dụ 1
5
0 0
1 0
2 3
3 3
4 0
Yes
Chẳng hạn, thực hiện lần lượt các giao dịch sau để mọi ngôi nhà có đúng số tiền mong muốn:
Ví dụ 2
5
0 0
1 2
2 4
3 2
4 0
No
Không có cách sử dụng dịch vụ chuyển tiền nào để mọi ngôi nhà có đúng số tiền mong muốn.
Ví dụ 3
2
1 1
2 1
No
Lưu ý rằng số tiền gửi phải là một số nguyên yên.
Ví dụ 4
2
1 1
2 2
Yes
Không cần sử dụng dịch vụ chuyển tiền.
JOI Open Contest 2019, bài Remittance (remittance), ngày 14/7/2019. Bản dịch từ đề tiếng Anh chính thức của JCIOI, theo giấy phép CC BY-SA 4.0.
Công ty Just Odd Inventions, gọi tắt là công ty JOI, chuyên tạo ra những phát minh kỳ lạ. Công ty vừa phát triển một loại vi-rút mới mang tên JOI Virus và muốn tiến hành thí nghiệm bằng cách cho cư dân trên đảo IOI nhiễm vi-rút này.
Đảo IOI có hình chữ nhật. Có \(R-1\) con đường song song chạy theo hướng đông-tây và \(C-1\) con đường song song chạy theo hướng bắc-nam, chia đảo thành \(RC\) ô. Mỗi ô có đúng một cư dân. Cư dân ở ô thứ \(i\) tính từ phía bắc và thứ \(j\) tính từ phía tây được gọi là cư dân \((i,j)\).
Mỗi ngày trên đảo được chia thành \(M\) khoảng thời gian, đánh số từ \(1\) đến \(M\). Gió luôn thổi từ một trong bốn hướng bắc, nam, đông hoặc tây. Hướng gió có thể thay đổi theo khoảng thời gian, nhưng tại cùng một khoảng thời gian trong ngày thì hướng gió giống nhau ở mọi ngày.
Mỗi cư dân \((i,j)\) có mức kháng vi-rút là số nguyên không âm \(U_{i,j}\):
Khoảng thời gian cuối cùng của một ngày và khoảng thời gian đầu tiên của ngày kế tiếp được tính là liên tiếp. Hướng gió trong chuỗi khoảng thời gian liên tiếp nói trên không nhất thiết phải giữ nguyên.
Để phục vụ thí nghiệm, công ty muốn có ít nhất một người nhiễm nhưng không muốn quá nhiều người nhiễm. Ban đầu, công ty chọn đúng một cư dân làm người nhiễm đầu tiên và cho người đó nhiễm JOI Virus. Không được chọn người có mức kháng vi-rút bằng \(0\).
Cho hướng gió trong từng khoảng thời gian và mức kháng vi-rút của từng cư dân, hãy tính số người nhiễm ít nhất sau \(10^{100}\) ngày, cùng số cách chọn người nhiễm đầu tiên để đạt được số người nhiễm ít nhất đó.
Dữ liệu được đọc từ đầu vào chuẩn. Ký tự thứ \(k\) của \(D\) cho biết hướng mà gió thổi từ đó đến trong khoảng thời gian \(k\), không phải hướng gió thổi tới. Các ký tự N, S, W, E lần lượt chỉ bắc, nam, tây, đông.
Ghi hai dòng ra đầu ra chuẩn:
N, S, W, E.W và E.Ví dụ 1
6 3 4
SWNEES
2 1 1 2
1 0 1 3
1 1 2 2
8
8
Xét cách chọn cư dân \((3,1)\) làm người nhiễm đầu tiên.
Không có cư dân nào khác bị nhiễm. Do đó, khi chọn \((3,1)\) làm người nhiễm đầu tiên, sau \(10^{100}\) ngày có \(8\) người nhiễm.
Dù chọn ai làm người nhiễm đầu tiên, số người nhiễm sau \(10^{100}\) ngày cũng không thể nhỏ hơn \(8\), nên dòng đầu là \(8\). Nếu chọn một trong các cư dân \((1,1)\), \((1,2)\), \((1,3)\), \((2,1)\), \((2,3)\), \((3,1)\), \((3,2)\) hoặc \((3,3)\) thì sau \(10^{100}\) ngày có đúng \(8\) người nhiễm. Có \(8\) cách chọn như vậy, nên dòng thứ hai là \(8\).
Ví dụ 2
4 4 4
EWWE
1 2 1 2
1 1 1 1
0 0 0 0
2 2 2 4
3
3
Ví dụ này thỏa mãn ràng buộc của nhóm \(1\).
JOI Open Contest 2019, bài Virus Experiment (virus), ngày 14/7/2019. Bản dịch từ đề tiếng Anh chính thức của JCIOI, theo giấy phép CC BY-SA 4.0.